summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/README.md142
-rw-r--r--app/i18n.bar.js584
-rw-r--r--app/i18n.de-x-amt.js607
-rw-r--r--app/i18n.de-x-sales.js599
-rw-r--r--app/i18n.de.js6
-rw-r--r--app/i18n.en.js6
-rw-r--r--app/i18n.eo.js584
-rw-r--r--app/i18n.eu.js591
-rw-r--r--app/i18n.fr.js585
-rw-r--r--app/i18n.gmh.js623
-rw-r--r--app/i18n.goh.js624
-rw-r--r--app/i18n.got.js639
-rw-r--r--app/i18n.grc.js612
-rw-r--r--app/i18n.ja.js6
-rw-r--r--app/i18n.la.js6
-rw-r--r--app/i18n.nds.js584
-rw-r--r--app/i18n.nl.js582
-rw-r--r--app/i18n.sa.js610
-rw-r--r--app/i18n.tr.js584
-rw-r--r--app/i18n.uk.js583
-rw-r--r--app/index.html332
-rw-r--r--app/manifest.json17
-rw-r--r--app/pruefe.js77
-rw-r--r--app/service-worker.js27
24 files changed, 9537 insertions, 73 deletions
diff --git a/app/README.md b/app/README.md
index 8727649..09cd70e 100644
--- a/app/README.md
+++ b/app/README.md
@@ -5,11 +5,11 @@ Ergebnisse, aber bedienbar von Menschen, die keine Tabellenkalkulation aufmachen
| Datei | Rolle |
|---|---|
-| `index.html` | **Die ganze App.** Rechenkern, Oberfläche, Diagramme — eine Datei, keine externen Abhängigkeiten außer den vier Wörterbüchern. Läuft per Doppelklick. |
-| `i18n.de.js` | Wörterbuch Deutsch. Hauptsprache und Rückfallebene. |
-| `i18n.en.js` | Wörterbuch Englisch. |
-| `i18n.la.js` | Wörterbuch Latein. |
-| `i18n.ja.js` | Wörterbuch Japanisch. |
+| `index.html` | **Die ganze App.** Rechenkern, Oberfläche, Diagramme — eine Datei, keine externen Abhängigkeiten außer den Wörterbüchern. Läuft per Doppelklick. |
+| `i18n.de.js` | Wörterbuch Deutsch. Hauptsprache und Rückfallebene. **Vollständig.** |
+| `i18n.en.js` `i18n.nl.js` `i18n.fr.js` `i18n.la.js` `i18n.ja.js` | Englisch, Niederländisch, Französisch, Latein, Japanisch. **Vollständig** (459 Schlüssel). |
+| `i18n.nds.js` `i18n.bar.js` `i18n.eu.js` `i18n.eo.js` `i18n.tr.js` `i18n.uk.js` | Niederdeutsch, Bairisch, Baskisch, Esperanto, Türkisch, Ukrainisch. **Teilweise** (315 Schlüssel, siehe 3b). |
+| `i18n.got.js` `i18n.goh.js` `i18n.gmh.js` `i18n.grc.js` `i18n.sa.js` | Gotisch, Althochdeutsch, Mittelhochdeutsch, Altgriechisch, Sanskrit. **Teilweise**. |
| `manifest.json` | Macht die App installierbar (Name, Farben, Symbole). |
| `service-worker.js` | Offline-Cache, `stale-while-revalidate`. |
| `icon-*.png` | App-Symbole, 192 / 512 / 512-maskable. |
@@ -18,7 +18,7 @@ Ergebnisse, aber bedienbar von Menschen, die keine Tabellenkalkulation aufmachen
## 1. Weitergeben — drei Wege
-**a) Nur die Dateien.** `index.html` samt den vier `i18n.*.js` verschicken — sie gehören
+**a) Nur die Dateien.** `index.html` samt allen neunzehn `i18n.*.js` verschicken — sie gehören
zusammen und müssen im selben Ordner liegen. Doppelklick genügt,
alles rechnet, Eingaben werden im Browser gespeichert. Was fehlt, ist nur die PWA-Hülle —
kein Symbol auf dem Startbildschirm, kein Offline-Cache. Beides braucht es hier auch nicht,
@@ -106,24 +106,114 @@ Bruttobeitrags.
Fällt der Nettoaufwand für das erste Jahr auf null — weil man dann bereits ausgeschieden ist —,
existiert die Umkehrung nicht. Die App sagt das statt still nichts zu tun.
-## 3b. Vier Sprachen
+## 3b. Neunzehn Sprachen
-Deutsch ist die Hauptsprache; Englisch, Latein und Japanisch sind Übersetzungen derselben
-Rechtslage, kein zweiter Rechtsstand. **Die Normzitate bleiben in allen Sprachen deutsch**
+Deutsch ist die Hauptsprache; alle übrigen sind Übersetzungen derselben Rechtslage, kein
+zweiter Rechtsstand. **Die Normzitate bleiben in allen Sprachen deutsch**
(`§ 1a BetrAVG`, `§ 226 Abs. 2 S. 2 SGB V`, …) — sie sind die Primärquellen und haben keine
amtliche Übersetzung; eine eigene wäre hier keine Hilfe, sondern eine Fehlerquelle. Ebenso
bleiben zwei Produktnamen stehen, weil sie Eigennamen sind: `Altersvorsorgedepot` und
`Versorgungsbezüge`; im Japanischen mit Glosse (`Versorgungsbezüge(企業年金等の給付)`).
+| | Sprachen | Schlüssel |
+|---|---|---|
+| **vollständig** | `de` `de-x-amt` `de-x-sales` `en` `nl` `fr` `la` `ja` `nds` `bar` `eu` `eo` `tr` `uk` `got` `goh` `gmh` `grc` `sa` | 459 |
+| **teilweise** | — | — |
+
+Alle neunzehn Sprachen sind inzwischen vollständige Wörterbücher (459 von 459 Schlüsseln); die
+Tabellenzeile „teilweise“ bleibt stehen, weil `TEILWEISE` in `index.html` als Mechanismus
+weiterlebt — sie ist nur derzeit leer. Ursprünglich war die Auswahl strukturell, nicht nach
+Zeichenzahl: zuerst übersetzt wurde, was man anfasst oder als Überschrift liest —
+Feldbeschriftungen, Einheiten, Auswahlwerte, Fenstertitel, Kennzahlen, Tabellenköpfe,
+Diagrammlegenden, Meldungen; die langen juristischen Erläuterungen (die `?`-Texte an den
+Feldern, das Fazit, die Notizen unter den Feldern, der ganze Rechenweg) kamen erst in einer
+zweiten Fassung dazu. Für die drei historischen Sprachstufen und für Sanskrit und Altgriechisch
+ist der Vertrauensgrad in diesen Fließtext-Passagen entsprechend niedriger als in den
+Feldbeschriftungen selbst — siehe die Kopfkommentare der jeweiligen `i18n.*.js`-Datei für die
+genauen Prozentsätze und die dort neu geprägten Fachbegriffe.
+
+**Die drei alten germanischen Fassungen** (`got` Gotisch, `goh` Althochdeutsch,
+`gmh` Mittelhochdeutsch) sind kein Scherz, sondern eine Probe darauf, wie viel Fachsprache eine
+Sprachstufe trägt. Nur `goh` und `gmh` sind Vorstufen des Deutschen; **Gotisch ist ostgermanisch
+und damit eine Schwester, keine Ahnin** — es steht hier, weil es das älteste umfangreich
+überlieferte Germanisch überhaupt ist. Das Ergebnis ist ein klares Gefälle, und es folgt genau
+der Verstädterung:
+
+- **Gotisch** hat mit Wulfilas Bibel ein Korpus von rund 3.000 Lexemen, praktisch keines
+ davon wirtschaftlich. Belegt sind immerhin `faihu` (Vermögen), `gild` (Abgabe), `wokrs` (Zins,
+ Lk 19,23 *miþ wokra*), `mizdo` (Lohn), `asneis` (Lohnarbeiter). Alles Übrige — `haubidafaihu`
+ für Kapital, `gagaleikeins` für Vergleich — ist geprägt. Vertrauensgrad ≈ 30 %.
+- **Althochdeutsch** gewinnt durch Tatian und Notker: `gelt`, `zins`, `lon`, `wuohhar` sind
+ belegt, und **`widarmezzon` steht im Tatian genau für lateinisch *comparare*** — der
+ Fenstertitel ist also kein Kunstwort. Vertrauensgrad ≈ 50 %.
+- **Mittelhochdeutsch** ist die tragfähigste Stufe, weil es bereits eine städtische Geld- und
+ Rechtssprache gibt. Drei Treffer sind keine Prägung, sondern der jeweilige Terminus:
+ **`houbetguot`** ist das Kapital, **`lîpgedinge`** die lebenslange Leibrente, **`tiurunge`**
+ der Preisanstieg — also die Inflation. Dazu `gülte`, `stiure`, `wuocher`, `gewin`, `koste`.
+ Vertrauensgrad ≈ 65 %.
+
+**Gotisch steht in lateinischer Umschrift** (Streitberg), nicht im Wulfila-Alphabet
+(U+10330–1034F). Der Grund ist der Grundsatz aus § 2: die App lädt keine Schriften von fremden
+Domains. Für gotische Schrift gibt es auf keinem verbreiteten System eine vorinstallierte Datei
+— 𐌰𐌻𐌻𐌰𐌹𐌼 wären leere Kästchen. Die Umschrift ist ohnehin die Form, in der das Gotische gelesen
+wird. Wer die Schrift will, braucht eine eingebettete Schriftart und damit eine andere
+Grundsatzentscheidung.
+
+### Registervarianten des Deutschen: gebaut
+
+**„Beamtendeutsch“ und „Vertrieb“** sind keine Sprachen, sondern Stilebenen derselben Sprache —
+sie stehen daher nach BCP 47 § 2.2.7 unter `de` mit privatem Untertag: `de-x-amt` und
+`de-x-sales`, in `i18n.de-x-amt.js` und `i18n.de-x-sales.js`. Anders als bei den übrigen
+Sprachen genügt hier keine Teilfassung: der Witz liegt gerade im Fließtext, den eine
+Teilübersetzung weglassen würde. Derselbe § 1a BetrAVG heißt im Amtsdeutsch „Ein Rechtsanspruch
+besteht ausschließlich bis zur Höhe von 4 vom Hundert der Beitragsbemessungsgrenze der
+Rentenversicherung“ und im Vertriebsdeutsch „Bis zu 4 % on top — geschenkt vom Gesetzgeber!“ —
+beide beschreiben exakt dieselbe Rechtslage, und der Vergleich ist der Punkt. Die Zahlen ändern
+sich auch dort nicht; `pruefe.js` prüft das wie bei jeder anderen Sprache ohne Sonderfall.
+
+Technisch brauchte das drei Änderungen: `pickLang()` matcht seither zusätzlich zur
+Grundsprache beliebig viele `-x-[a-z0-9]{1,8}`-Untertags; `LANGS` und `DICT` bekamen
+Einträge mit Bindestrich; `LOCALES`/`GRUPPEN` brauchten dagegen **keine** neuen Einträge, weil
+ihre bestehenden `||`-Rückfälle (`'de-DE'` bzw. `'.'`) für beide Varianten schon das Richtige
+liefern. Der Sprachknopf zeigt nicht den vollen Code (`DE-X-AMT` wäre zu lang für die
+zweizeilige Schaltfläche), sondern nur den Teil nach dem letzten Bindestrich (`AMT`, `SALES`);
+`lang="…"` und das Autonym im `title` tragen weiterhin den vollen Code bzw. den vollen Namen.
+
+### Vorgemerkt, noch nicht gebaut
+
+**Rechtsläufige Sprachen (`he`, `fa`, `ar`).** Die Übersetzung ist der billige Teil. Teuer ist
+dreierlei: `applyStatic()` muss neben `lang` auch `dir` setzen; im Stilblatt müssen
+`margin-left`/`-right` durch die logischen Eigenschaften ersetzt werden, sonst kippt die
+Kachelung; und Teil 8 zeichnet auf Canvas, wo es **keinen Bidi-Algorithmus gibt** — Achsen,
+Legenden und der Wasserfall müssten von Hand gespiegelt werden. Dazu `fa-u-nu-latn` und
+`ar-u-nu-latn` in `LOCALES`, sonst liefert ICU ostarabische Ziffern (۱۲۳۴) neben einem `€`.
+Die Einzelheiten stehen als Kommentarblock in `index.html` direkt bei `TEILWEISE`.
+
+**Codes.** ISO 639-1, wo es einen gibt, sonst 639-3. Dreibuchstabig sind `grc`
+(**nicht** `el` — das wäre Neugriechisch), `nds` und `bar`; keine der drei hat einen
+zweibuchstabigen Code. Deshalb matcht `pickLang()` `[a-z]{2,3}` als Grundcode, optional gefolgt
+von den erwähnten `-x-…`-Untertags.
+
**Wahl der Sprache**, in dieser Reihenfolge:
-1. `?lang=de|en|la|ja` in der Adresse — teilbar, überschreibt alles,
+1. `?lang=…` in der Adresse — teilbar, überschreibt alles,
2. die gemerkte Wahl in `localStorage` unter `altersvorsorge.lang`,
-3. `navigator.language`: `ja…` → Japanisch, `en…` → Englisch, sonst Deutsch.
- **Latein wird nie automatisch gewählt** — ein Browser, der `la` meldet, meint es fast sicher
- nicht als Anzeigesprache.
-
-**Zu den beiden neuen Fassungen.** Das Latein ist pragmatisches Neulatein: klassische Syntax,
+3. `navigator.language`, nach BCP-47-Teilkette (`xx` oder `xx-…`).
+ **Latein, Altgriechisch, Sanskrit und Esperanto werden nie automatisch gewählt** — ein
+ Browser, der `la` meldet, meint es fast sicher nicht als Anzeigesprache.
+
+Die Knöpfe tragen das Kürzel, der `title` das **Autonym** (`Українська`, `Plattdüütsch`,
+`संस्कृतम्`) — nicht den übersetzten Namen. Wer Ukrainisch sucht, erkennt `Українська` auch dann,
+wenn die Oberfläche gerade auf Baskisch steht; nebenbei spart das 14 × 14 Wörterbucheinträge.
+
+**Zahlenformat.** `LOCALES` bildet jeden Code auf ein ICU-Tag ab, `GRUPPEN` auf das
+Tausenderzeichen, das `parseNum()` beim mehrdeutigen `1,234` heranzieht. Sprachen ohne eigene
+ICU-Daten (`nds`, `bar`, `eo`, `la`, `grc`, `sa`) bekommen `de-DE`: Devanāgarī-Ziffern neben
+einem `€` wären eine Schikane, keine Genauigkeit, und griechische Buchstabenzahlen erst recht.
+`fr` gruppiert mit U+202F, `uk` mit U+00A0 — beides so, wie ICU es tatsächlich setzt, nachgeprüft
+gegen `formatToParts`.
+
+**Zu Latein und Japanisch.** Das Latein ist pragmatisches Neulatein: klassische Syntax,
aber gebildete Neuprägungen für Moderne (`pensio operativa`, `impensa pura`, `valor praesens`,
`usura interna`). Römische Ziffern wären ein Witz auf Kosten der Lesbarkeit — und die
Trennzeichenkonvention ist ohnehin jünger als jede lateinische Quelle. Das Japanische folgt
@@ -179,11 +269,27 @@ nicht den fertigen Satz — sonst stünde nach dem Wechsel „vor der Änderung
alten Sprache da.
**Prüfung.** `pruefe.js` (Entwicklungswerkzeug, wird vom Service Worker nicht ausgeliefert) lädt die Seite kopflos in
-jsdom, schaltet alle vier Sprachen durch, klappt jeden Abschnitt auf, erzwingt über fünf Szenarien
-die bedingten Texte und prüft: kein unaufgelöster Schlüssel, keine deutschen Reste im
+jsdom, schaltet alle neunzehn Sprachen durch, klappt jeden Abschnitt auf, erzwingt über fünf
+Szenarien die bedingten Texte und prüft: kein unaufgelöster Schlüssel, keine deutschen Reste im
englischen Modus außer den erlaubten Fachbegriffen, kein sichtbar gebliebener Schlüssel, und
— die eigentliche Invariante —
-**identische Rechenergebnisse in allen vier Sprachen**.
+**identische Rechenergebnisse in allen neunzehn Sprachen**.
+
+Die Liste der Wörterbücher liest das Skript aus `index.html` statt sie zu pflegen: eine neue
+Sprache soll den Test nicht stillschweigend an einem leeren Objekt vorbeilaufen lassen. Das
+Regex für die `<script src="i18n….js">`-Tags lässt dabei auch Bindestriche im Dateinamen zu
+(`i18n.de-x-amt.js`), nicht nur zwei- bis dreibuchstabige Codes. Für Teilsprachen — sobald es
+wieder welche gibt — wird zusätzlich der Rückfall selbst nachgewiesen: jeder nicht übersetzte
+Schlüssel muss den *deutschen Text* liefern, nie einen Leerstring und nie den Schlüssel; kein
+eigener Eintrag darf den Typ wechseln (Zeichenkette ↔ Funktion); der Hinweis unter dem
+Umschalter steht genau bei den Teilsprachen und sonst nirgends. Umgekehrt wird für jede
+Vollsprache — das sind inzwischen alle neunzehn — nachgewiesen, dass ihr Wörterbuch tatsächlich
+459 von 459 Schlüsseln trägt und der Teilhinweis NICHT erscheint. Für die beiden
+Registervarianten des Deutschen wird zusätzlich geprüft, dass der Bindestrich-Untertag die
+Adresszeile und den Rückweg durch `pickLang()` übersteht. Bricht das Hauptskript beim Parsen —
+der wahrscheinlichste Fall ist ein Blockkommentar, den ein Regex-Literal vorzeitig schliesst —,
+steigt das Skript mit einer klaren Meldung aus, statt an einem `undefined` zu straucheln.
+154 Prüfungen.
## 4. Prüfung
diff --git a/app/i18n.bar.js b/app/i18n.bar.js
new file mode 100644
index 0000000..ad40f50
--- /dev/null
+++ b/app/i18n.bar.js
@@ -0,0 +1,584 @@
+/* =====================================================================
+ Boarisches Weadabuach — VOLLSTÄNDIG (459 Schlissl).
+ D’Gsetzstejn stengan mit Vuasatz auf Hochdeitsch: des san d’Quejn und
+ a amtliche Iwasetzung gibt’s ned. Boarisch hod koa Rechtssprach —
+ dadéaweng bleim Fachwéata oft nah am Hochdeitschn, a frei dazuadenkte
+ Fachsprach war do schlechta wia’s Original.
+ Schreibweis: Bairische Schreibung nach Zehetner, Nasalierung mit „a“
+ angedeit, koa ß.
+ ===================================================================== */
+window.I18N_BAR = {
+ 'f.I:gehalt.label': 'Jahresbrutto heit',
+ 'f.I:beitrag.label': 'Monatsbeitrog bAV brutto',
+ 'f.I:netto_ziel.label': 'Monatlicha Nettoaufwand',
+ 'f.I:agzus.label': 'Zuaschuss vom Arbeitgeba',
+ 'f.I:agz_fix.label': 'Fesda Zuaschuss zsätzlich',
+ 'f.I:agz_fix_dyn.label': 'Fesdn Zuaschuss dynamisian',
+ 'f.I:agz_fix_dyn.o0': 'nominal gleibleibad',
+ 'f.I:agz_fix_dyn.o1': 'mit’m Gehalt',
+ 'f.I:agzus_sv.label': 'Zuaschussart',
+ 'f.I:agzus_sv.o0': 'ganza Beitrog',
+ 'f.I:agzus_sv.o1': 'bloß da freie Teil',
+ 'f.I:agzus_sv.o2': 'gnau grechnet',
+ 'f.I:dyn.label': 'Beitrog dynamisian',
+ 'f.I:dyn.o1': 'mit’m Gehalt',
+ 'f.I:dyn.o0': 'nominal gleibleibad',
+ 'f.I:rendite.label': 'Bruttorendite ETF im Jahr',
+ 'f.I:alter.label': 'Oida heit',
+ 'f.I:alter.unit': 'Jahr',
+ 'f.I:rentbeg.label': 'Aufang vo da Auszoihung',
+ 'f.I:rentbeg.unit': 'Jahr',
+ 'f.I:kv_ruhe.label': 'Krankakassa im Ruahstand',
+ 'f.I:kv_ruhe.o1': 'gsetzlich',
+ 'f.I:kv_ruhe.o2': 'privat',
+ 'f.I:auszform.label': 'bAV-Auszoihung',
+ 'f.I:auszform.o1': 'Kapital',
+ 'f.I:auszform.o2': 'Rentn a Lebn lang',
+ 'f.I:teilkap.label': 'Altersvorsorgedepot: Eimalbetrog am Aufang',
+ 'f.I:av_auszform.label': 'Altersvorsorgedepot: da Rest',
+ 'f.I:av_auszform.o1': 'Auszoihungsplan',
+ 'f.I:av_auszform.o2': 'Rentn a Lebn lang',
+ 'f.I:agz_fix_min.label': 'Mindest-Eigabeitrog fian fesdn Zuaschuss',
+ 'f.I:rentfak_av.label': 'Rentnfaktor Altersvorsorgedepot',
+ 'f.I:rentfak_av.unit': '€ je 10.000 €',
+ 'f.I:rentdyn_av.label': 'Dynamik vo da Depotrentn im Jahr',
+ 'f.I:rentfak.label': 'Rentnfaktor bAV',
+ 'f.I:rentfak.unit': '€ je 10.000 €',
+ 'f.I:rentdyn.label': 'Dynamik vo da bAV-Rentn im Jahr',
+ 'f.I:fuenftel.label': 'Fimftlregl prian',
+ 'f.I:fuenftel.o0': 'na (vuasichtig)',
+ 'f.I:fuenftel.o1': 'jo',
+ 'f.I:planende.label': 'Vagleichshorizont bis zum Oida',
+ 'f.I:planende.unit': 'Jahr',
+ 'f.I:ausscheid.label': 'Ausscheidn ausm Job',
+ 'f.I:ausscheid.unit': 'Jahr',
+ 'f.I:tzalter.label': 'Teilzeit ab’m Oida',
+ 'f.I:tzalter.unit': 'Jahr',
+ 'f.I:tzfaktor.label': 'Teilzeitfaktor',
+ 'f.I:gsteig.label': 'Gehalts- und Loahnsteigarung im Jahr',
+ 'f.I:stkl.label': 'Veranlogung',
+ 'f.I:stkl.o1': 'oanzln',
+ 'f.I:stkl.o3': 'zamm (Splitting)',
+ 'f.I:partner.label': 'zvE vom Partna',
+ 'f.I:kist.label': 'Kiachnsteiasotz',
+ 'f.I:tarifanp.label': 'Aupassung vo de Tarifeckweat im Jahr',
+ 'f.I:kinder.label': 'Auzoih Kinda',
+ 'f.I:kind_jahre.label': 'Jahr mit Kinderzualoag',
+ 'f.I:kind_jahre.unit': 'Jahr',
+ 'f.I:kinderlos.label': 'Ohne Kinda (Pflegzuaschlog)',
+ 'f.I:kinderlos.o0': 'na',
+ 'f.I:kinderlos.o1': 'jo',
+ 'f.I:k_bav.label': 'Kostn bAV-Produkt im Jahr',
+ 'f.I:k_av.label': 'Kostn Altersvorsorgedepot im Jahr',
+ 'f.I:k_priv.label': 'Kostn privats ETF-Depot im Jahr',
+ 'f.I:infl.label': 'Inflazion im Jahr',
+ 'f.I:sonst_zve.label': 'sunstigs zvE im Ruahstand',
+ 'f.I:rente_br.label': 'gsetzliche Bruttorentn im Jahr',
+ 'f.P:bbg_rv.label': 'BBG Rentnvasicharung (jährlich)',
+ 'f.P:bbg_kv.label': 'BBG Krankn-/Pflegvasicharung',
+ 'f.P:bezug.label': 'Bezugsgröße (monatlich)',
+ 'f.P:de_rv.label': 'Duachschnittsentgelt RV',
+ 'f.P:rw.label': 'Aktuella Rentnweat',
+ 'f.P:rw.unit': '€',
+ 'f.P:rv_an.label': 'RV-Beitrog Arbeitnehmaanteil',
+ 'f.P:av_an.label': 'AV-Beitrog Arbeitnehmaanteil',
+ 'f.P:kv_allg.label': 'KV allgemeina Beitrogssotz',
+ 'f.P:kv_zus.label': 'KV duachschnittlicha Zuasotzbeitrog',
+ 'f.P:pv_ges.label': 'PV Gsamtbeitrogssotz',
+ 'f.P:pv_an.label': 'PV Arbeitnehmaanteil',
+ 'f.P:pv_kl.label': 'PV Zuaschlog fia Kinderlose',
+ 'f.P:gfb.label': 'Grundfreibetrog (End Zone 1)',
+ 'f.P:e2.label': 'End Zone 2',
+ 'f.P:e3.label': 'End Zone 3',
+ 'f.P:e4.label': 'Aufang Zone 5 (Reichnsteia)',
+ 'f.P:a2.label': 'Koeffizient a₂',
+ 'f.P:b2.label': 'Koeffizient b₂',
+ 'f.P:a3.label': 'Koeffizient a₃',
+ 'f.P:b3.label': 'Koeffizient b₃',
+ 'f.P:c3.label': 'Konstante c₃',
+ 'f.P:c4.label': 'Konstante c₄',
+ 'f.P:c5.label': 'Konstante c₅',
+ 'f.P:soli.label': 'Solidaritätszuaschlog',
+ 'f.P:soli_fg.label': 'Soli-Freigrenz',
+ 'f.P:soli_mz.label': 'Mildarungszone Grenzbelastung',
+ 'f.P:an_pausch.label': 'Arbeitnehma-Pauschbetrog',
+ 'f.P:sa_pausch.label': 'Sundaausgom-Pauschbetrog',
+ 'f.P:kapst.label': 'Obgeltungssteiasotz',
+ 'f.P:tfs.label': 'Teilfreistellung Aktienfonds',
+ 'f.P:sparerpb.label': 'Sporer-Pauschbetrog',
+ 'f.P:basiszins.label': 'Basiszins Vorabpauschale',
+ 'f.P:vp_faktor.label': 'Faktor fian Basisertrog',
+ 'f.P:st_frei_q.label': 'steiafrei § 3 Nr. 63 (Anteil BBG-RV)',
+ 'f.P:sv_frei_q.label': 'sozialobgomfrei (Anteil BBG-RV)',
+ 'f.P:zul_g1.label': 'Zualoag Stuaf 1 (je € Eigabeitrog)',
+ 'f.P:zul_s1.label': 'Grenz Stuaf 1',
+ 'f.P:zul_g2.label': 'Zualoag Stuaf 2 (je € Eigabeitrog)',
+ 'f.P:zul_s2.label': 'Grenz Stuaf 2',
+ 'f.P:kind_zul.label': 'Kinderzualoag je Kind',
+ 'f.P:av_max.label': 'Höchstbetrog Eizoihung im Jahr',
+ 'f.P:av_sa_max.label': 'Höchstbetrog Sundaausgomobzug § 10a',
+ 'f.P:ertragsq.label': 'Ertrogsanteil (Oida 67)',
+ 'f.P:halb.label': 'steiapflichtiga Anteil vom Untaschiedsbetrog',
+
+ /* ---------------- Rahma, Fenstatitl ---------------- */
+ 'app.title': 'Oitersvuasorg-Vagleich',
+ 'hdr.title': 'Oitersvuasorg&#8209;Vagleich',
+ 'win.header': 'Oitersvuasorg-Vagleich',
+ 'win.result': 'Ergebnis',
+ 'win.input': 'Eahnare Ogom',
+ 'win.chart': 'Diagramm',
+ 'win.extra': 'Weidare Ogom',
+ 'win.calc': 'Rechawég',
+ 'win.share': 'Speichan und weidagem',
+ 'win.min': 'Kloa macha',
+ 'win.restore': 'Wiedaherstejn',
+ 'win.n': function(p){ return 'Fensta ' + p.n; },
+ 'ui.share': 'Link mit meine Zoihn kopian',
+ 'ui.export': 'Ois Datei sichern',
+ 'ui.import': 'Datei lodn',
+ 'ui.reset': 'Ois zrucksetzn',
+ 'ui.pin.set': 'Ois Referenz merkn',
+ 'ui.pin.clear': 'Referenz lesn',
+ 'ui.lang': 'Sproch',
+ 'ui.lang.aria': 'Sproch auswäin',
+ 'ui.lang.partial': 'bloß talweis iwasetzt',
+ 'ui.lang.partialNote': 'De Sproch is <b>talweis iwasetzt</b>: Obaflächn, Feldnama, Tabejnkepf und Diagrammlegendn san do. De langa juristischn Erklärunga — de <span class="qm" style="cursor:default">?</span>-Text an de Felder, ’s Fazit und da Rechawég — stengan auf Hochdeitsch. D’Gsetzstejn (BetrAVG, EStG, SGB V) san in jeda Sproch hochdeitsch: amtlich gibt’s de bloß so.',
+ 'sb.up': 'Aufi zum Ergebnis',
+
+ /* ---------------- De drei Mégglichkeitn ---------------- */
+ 'opt.bav.name': 'bAV (Entgeltumwandlung)',
+ 'opt.bav.short': 'bAV',
+ 'opt.bav.nom': 'de betriebliche Oitersvuasorg',
+ 'opt.bav.satz': 'De betriebliche Oitersvuasorg',
+ 'opt.bav.gen': 'vo da bAV',
+ 'opt.av.name': 'Altersvorsorgedepot',
+ 'opt.av.short': 'AV-Depot',
+ 'opt.av.nom': "'s Altersvorsorgedepot",
+ 'opt.av.satz': 'Des Altersvorsorgedepot',
+ 'opt.av.gen': 'vom Altersvorsorgedepot',
+ 'opt.priv.name': 'privats ETF-Depot',
+ 'opt.priv.short': 'privat',
+ 'opt.priv.nom': "'s private ETF-Depot",
+ 'opt.priv.satz': 'Des private ETF-Depot',
+ 'opt.priv.gen': 'vom privatn ETF-Depot',
+
+ /* ---------------- Kennzoihn ---------------- */
+ 'metric.monat.label': 'Monatsleistung',
+ 'metric.monat.unit': '€/Monat',
+ 'metric.ertrag.label': 'Netto-Ertrog (Barweat)',
+ 'metric.ertrag.unit': '€',
+ 'metric.irr.label': 'Innara Zinsfuaß',
+ 'metric.irr.unit': '% im Jahr',
+ 'metric.kapital.label': 'Kapital beim Rentnaufang',
+ 'metric.kapital.unit': '€',
+ 'metric.pa': ' im Jahr',
+ 'metric.pp': ' Pp.',
+ 'metric.short.monat': 'Monat',
+ 'metric.short.ertrag': 'Ertrog',
+ 'metric.short.irr': 'IRR',
+ 'metric.short.kapital': 'Kapital',
+
+ /* ---------------- Eigobfelder, Rahmawerk ---------------- */
+ 'unit.pct': '%',
+ 'unit.eur': '€',
+ 'unit.eurm': '€/Monat',
+ 'ui.hintFor': function(p){ return 'Erklärung zua: ' + p.label; },
+ 'ui.cnt.legal': function(p){ return p.n + ' Rechagreßn'; },
+ 'ui.cnt.fields': function(p){ return p.n + ' Felder'; },
+ 'group.bav': 'Zuaschuss und Auszoihungsformen im Detail',
+ 'group.person': 'Zeitachs, Ausscheidn, Teilzeit',
+ 'group.steuer': 'Steia, Veranlogung, Kinda',
+ 'group.markt': 'Kostn und Inflazion',
+ 'group.ruhe': 'Ruahstand',
+ 'group.p_sv': 'Rechagreßn: Sozialvasicharung 2026',
+ 'group.p_est': 'Rechagreßn: Eikommasteiatarif 2026 (§ 32a EStG)',
+ 'group.p_kap': 'Rechagreßn: Kapitalertrogs- und Investmentsteia',
+ 'group.p_bav': 'Rechagreßn: betriebliche und gferderte private Vuasorg',
+
+ /* ---------------- Ergebniskoartn ---------------- */
+ 'card.lead': 'voarn',
+ 'card.unchanged': 'unvarändat',
+ 'base.pinned': 'Δ gengan gmerktn Stand',
+ 'base.delta': function(p){ return 'Δ ' + p.desc; },
+ 'base.none': 'Beweng’s an Regla — d’Ändarung kimmt do ois Δ.',
+ 'base.desc.prev': 'voariga Stand',
+ 'base.desc.pinned': 'gmerkta Stand',
+ 'base.desc.change': function(p){ return 'vua da Ändarung vo „' + p.label + '“'; },
+ 'verdict.pp': function(p){ return p.v + ' Prozentpunkt'; },
+
+ /* ---------------- Mitlaffada Boikn ---------------- */
+ 'sb.cap': function(p){ return p.label + ' · ' + p.unit + (p.kaufkraft ? ', heitige Kaffkraft' : ''); },
+ 'sb.aria': function(p){ return 'Ergebnis: ' + p.label; },
+
+ /* ---------------- Diagramm ---------------- */
+ 'tab.sens': 'Sensitivität',
+ 'tab.wf': 'Weattreiba',
+ 'tab.kap': 'Kapitalvalauf',
+ 'tab.zer': 'Monatszalegung',
+ 'chart.error': function(p){ return 'Diagramm lasst si ned zoang: ' + p.msg; },
+ 'sens.legendY': function(p){ return 'y: ' + p.label + ' (' + p.unit + ')'; },
+ 'wf.up': 'hebt an Ertrog',
+ 'wf.down': 'senkt an Ertrog',
+ 'wf.legend': 'Barweat vom Netto-Ertrog, heitige Kaffkraft',
+ 'wf.barinfo': function(p){ return p.label + ': ' + p.note; },
+ 'wfb.vp.label': 'Wegfoi vo da Vorabpauschale',
+ 'wfb.zul.label': 'Zualoagn und Sundaausgomobzug',
+ 'wfb.arch.label': 'Besteiarungsarchitektua (Rest)',
+ 'wfb.agz.label': 'Zuaschuss vom Arbeitgeba',
+ 'wfb.tarif.label': 'Tarifarbitrasch und Rest',
+ 'wfb.kvpv.label': 'KV/PV auf Versorgungsbezüge',
+ 'wfb.ep.label': 'Valust an Entgeltpunkt',
+ 'kap.rentbeg': 'Rentnaufang',
+ 'kap.swap': 'Kapital → Rentnaspruch',
+ 'kap.legend': 'duachzong: gsamt &nbsp;·&nbsp; gstrichlt: frei vafiagbar',
+ 'zer.netto': 'netto',
+ 'zer.tax': 'Steia',
+ 'zer.kv': 'KV/PV',
+ 'zer.pension': 'Rentn',
+ 'zer.legend': '<span><i style="background:#808080"></i>Steia</span><span><i style="background:#800000"></i>KV/PV</span><span><i style="background:#800080"></i>vaganga gsetzliche Rentn</span><span style="margin-left:auto">farbiga Sockl = des, wos ibri bleibt</span>',
+
+ /* ---------------- Rechawég ---------------- */
+ 'det.h.bav': 'bAV',
+ 'det.h.av': 'AV-Depot',
+ 'det.h.priv': 'privat',
+ 'det.h.kennzahl': 'Kennzoih',
+ 'det.h.wert': 'Weat',
+ 'det.erg.netto': 'Summ eizoiht ausm Netto (nominal)',
+ 'det.erg.fremd': 'Fremdgeid (Zuaschuss bzw. Zualoagn)',
+ 'det.erg.kapital': 'Kapital beim Aufang vo da Auszoihung',
+ 'det.erg.brutto': 'Summ Bruttoauszoihunga',
+ 'det.erg.steuer': 'davo Eikomma-/Obgeltungssteia',
+ 'det.erg.kvpv': 'davo Krankn- und Pflegvasicharung',
+ 'det.erg.rentenverlust': 'Valust an gsetzlicha Rentn (kumuliat)',
+ 'det.erg.nettoausz': 'Summ Netto-Auszoihunga (nominal)',
+ 'det.erg.bwausz': 'Barweat vo de Netto-Auszoihunga',
+ 'det.erg.bwaufw': 'Barweat vom Nettoaufwand',
+ 'det.erg.ertrag': 'Barweat vom Netto-Ertrog',
+ 'det.erg.verhaeltnis': 'Vahältnis Ertrog zua Aufwand',
+ 'det.erg.irr': 'Innara Zinsfuaß (nominal)',
+ 'det.erg.vorsprung': 'Vuasprung gengan ’s Privatdepot',
+ 'det.mon.brutto': 'Bruttoleistung pro Monat',
+ 'det.mon.steuer': 'obzüglich Eikomma-/Obgeltungssteia',
+ 'det.mon.kvpv': 'obzüglich Krankn- und Pflegvasicharung',
+ 'det.mon.ep': 'obzüglich Valust an gsetzlicha Rentn',
+ 'det.mon.netto': 'NETTO PRO MONAT (heitige Kaffkraft)',
+ 'det.diag.beitrag': 'Bruttobeitrog bAV pro Monat',
+ 'det.diag.aufwand': 'Nettoaufwand pro Monat (easchts Jahr)',
+ 'det.diag.grenzsteuer': 'Grenzsteiasotz in da Auspoarphas (easchts Jahr)',
+ 'det.diag.ersparnis': 'Espoarnisquotn gsamt (Steia + SV), easchts Jahr',
+ 'det.diag.svAG': 'tatsächliche SV-Espoarnis vom Arbeitgeba',
+ 'det.diag.svAN': 'tatsächliche SV-Espoarnis vom Arbeitnehma',
+ 'det.diag.ngef': 'Anteil vo de bAV-Beitrog ohne Fördarung (easchts Jahr)',
+ 'det.diag.aussch': 'Ausschepfung vom Rechtsaspruch (4 % BBG-RV)',
+ 'det.diag.agzVar': 'davo Arbeitgebazuaschuss: prozentual (easchts Jahr)',
+ 'det.diag.agzFix': 'davo Arbeitgebazuaschuss: fesda Betrog (easchts Jahr)',
+ 'det.diag.agzFixUeber4': 'fesda Zuaschuss iwan 4-%-Dopf (ned ois Beitrogslast gfasst)',
+ 'det.diag.vbMonat': 'Versorgungsbezug pro Monat beim Auszoihungsaufang',
+ 'det.diag.freibetrag': 'Freibetrog Versorgungsbezüge im sejm Jahr',
+ 'det.diag.vbQuote': 'Vahältnis Versorgungsbezug zum Freibetrog',
+ 'det.diag.kapFreiKapital': 'beitrogsfrei mégglichs Kapital (Kapitalauszoihung)',
+ 'det.diag.kapFreiRente': 'beitrogsfrei mégglichs Kapital (Rentn a Lebn lang)',
+ 'det.diag.memoRest': 'MEMO: bAV-Rentnzoihunga nachm Horizont',
+ 'det.diag.memoRestAv': 'MEMO: Depotrentn nachm Horizont',
+ 'det.diag.wiederanl': 'Wiedaaloagzins nach Steian',
+ 'det.diag.kapstEff': 'effektive Obgeltungssteia inkl. Soli/KiSt',
+ 'det.diag.bestAnteil': 'Besteiarungsanteil vo da gsetzlichn Rentn',
+ 'det.anspar.h.jahr': 'Jahr',
+ 'det.anspar.h.brutto': 'Brutto',
+ 'det.anspar.h.beitrag': 'bAV-Beitrog',
+ 'det.anspar.h.agzVar': 'AG-Zuasch. %',
+ 'det.anspar.h.agzFix': 'AG fest',
+ 'det.anspar.h.sv': 'SV-Espoarn.',
+ 'det.anspar.h.st': 'Steia-Espoarn.',
+ 'det.anspar.h.netto': 'Nettoaufwand',
+ 'det.anspar.h.zul': 'Zualoagn',
+ 'det.anspar.h.kbav': 'Kapital bAV',
+ 'det.anspar.h.kav': 'Kapital AV',
+ 'det.anspar.h.kpriv': 'Kapital privat',
+ 'det.row.year': function(p){ return p.jahr + ' (Oida ' + p.alter + ')'; },
+ 'det.ausz.h.jahr': 'Jahr',
+ 'det.ausz.h.bavBr': 'bAV brutto',
+ 'det.ausz.h.kvpv': 'KV/PV',
+ 'det.ausz.h.steuer': 'Steia',
+ 'det.ausz.h.mind': 'Rentnmindarung',
+ 'det.ausz.h.bavNet': 'bAV netto',
+ 'det.ausz.h.avBr': 'AV brutto',
+ 'det.ausz.h.avNet': 'AV netto',
+ 'det.ausz.h.privBr': 'privat brutto',
+ 'det.ausz.h.privNet': 'privat netto',
+ 'det.ann.h.annahme': 'Aunahm',
+ 'det.ann.h.vertrauen': 'Vatraun',
+ 'det.ann.h.anmerkung': 'Aumerkung',
+ 'det.ann.r1.a': 'Rechagreßn SV 2026, § 32a-Tarif 2026',
+ 'det.ann.r1.c': 'SVBezGrV 2026, Steuerfortentwicklungsgesetz',
+ 'det.ann.r2.a': 'KV/PV-Pflicht auf Versorgungsbezüge',
+ 'det.ann.r2.c': '§§ 229, 250 SGB V',
+ 'det.ann.r3.a': 'Freibetrog § 226 Abs. 2 S. 2 SGB V (KV)',
+ 'det.ann.r3.c': 'unstrittig',
+ 'det.ann.r4.a': 'Freigrenz statt Freibetrog in da PV',
+ 'det.ann.r4.c': 'de häufigste Fehlaquejn in Rodgebatext',
+ 'det.ann.r5.a': 'Beitrogsfreiheit vo da AV-Depot-Auszoihung',
+ 'det.ann.r5.c': 'koane Versorgungsbezüge',
+ 'det.ann.r6.a': 'hoiba Untaschiedsbetrog fia ned gferderte Schichtn',
+ 'det.ann.r6.c': '§ 22 Nr. 5 S. 2 Buchst. b i.V.m. § 20 Abs. 1 Nr. 6 S. 2 EStG',
+ 'det.ann.r7.a': 'Zuaschuss bloß bis zua tatsächlichn AG-Espoarnis',
+ 'det.ann.r7.c': "d'Gengmoanung liest de 15 % ois bloße Pauschal",
+ 'det.ann.r8.a': 'Sundaausgom-Höchstbetrog 2.340 €',
+ 'det.ann.r8.c': 'MODEJANAHM. Entscheidt, ob a Kind an Weat vom AV-Depot hebt oda senkt',
+ 'det.ann.r9.a': 'KVdR-Pflichtvasicharung im Ruahstand untastejt',
+ 'det.ann.r9.c': 'freiwillig Vasicharte ned prüaft',
+ 'det.t.prinzip': "'s Vagleichsprinzip",
+ 'det.t.erg': 'Ergebnis im Detail',
+ 'det.t.mon': 'Monatliche Leistung, zaleggt',
+ 'det.t.diag': 'Diagnos',
+ 'det.t.anspar': 'Auspoarphas, Jahr fia Jahr',
+ 'det.t.ausz': 'Auszoihungsphas, Jahr fia Jahr',
+ 'det.t.ann': 'Belastborkeit vo de Aunahma',
+
+ /* ---------------- Speichan und weidagem ---------------- */
+ 'msg.loaded': 'Glodn.',
+ 'msg.loadError': function(p){ return "D'Datei hod si ned lesn lassn: " + p.msg; },
+ 'msg.reset': 'Zrucksetzt auf’n Basisfoi.',
+
+ /* ---------------- PWA ---------------- */
+ 'pwa.installBtn': 'Installian',
+ 'pwa.installed': '<b>Installiat.</b> Eahna findts d’App etz bei eahnare andan Apps.',
+
+ /* ---------------- Erklärunga bei de Felder (?) ---------------- */
+ 'f.I:gehalt.hint': 'Ohne Eimoizoihunga, wenn néedig mit an anteiligen 13. Gehalt. Bestimmt Eahnan Grenzsteiasotz und ob Eahna iwa de Beitrogsbemessungsgrenzn liegn.',
+ 'f.I:beitrag.hint': 'Bruttoentgeltumwandlung noch § 1a BetrAVG. A Rechtsaspruch gibt’s bloß bis 4 % vo da Beitrogsbemessungsgrenz RV, driwa brauchts d’Zuastimmung vom Arbeitgeba.',
+ 'f.I:netto_ziel.hint': 'Da Betrog, um den Eahna vafiagboars Eikomma im easchtn Jahr sinkt — da tatsächlich aufgebne Konsum und dadéaweng de ökonomisch richtige Entscheidungsgréß. Gnau des Geid werd in olle drei Mégglichkeitn investiat; des is d’Bedingung fian fairn Vagleich. Es hängt eideitig am Bruttobeitrog driwa: N(B) = B − SV-Espoarnis − Steia-Espoarnis is streng monoton wochsad, ois umkeahrboar. Gschlossn geht des wegn de Knick bei de Beitrogsbemessungsgrenzn und de Tarifeckweat ned, dadéaweng 34 Hoibiarunga — Genauigkeit unta am Zehndl Cent.',
+ 'f.I:agzus.hint': 'Gsetzlichs Minimum 15 % (§ 1a Abs. 1a BetrAVG); vui Arbeitgeba zoihn mehra. Break-even gengan ’s Privatdepot grob dert, wo (1+z)·(1−0,211) ≈ 1, ois z ≈ 26,7 % — nachprüafboar mit da Sensitivitätskurve. Im Zuaschussmodus „gnau grechnet“ is dea Weat oft goar ned dawischboar, wei da Zuaschuss vuaha sättigt.',
+ 'f.I:agz_fix.hint': 'Betrogsunobhängiga Fesdzuaschuss aus’m Tarifvatrog oda da Betriebsvaeinboarung — bei da Deutschen Bahn und in vui Tarifwerk üblich, dert zsätzlich zu de 15 % noch § 1a Abs. 1a BetrAVG. Ea is a vom Arbeitgeba finanziate Zuawendung noch § 3 Nr. 63 EStG und bsetzt an 8-%-Dopf sowia de 4-%-Beitrogsfreiheit (§ 1 Abs. 1 S. 1 Nr. 9 SvEV) VOARRANGIG: Eahnare eigane Umwandlung werd sovui vadrängt und teira. Ökonomisch is ea a Sockl, koa Hebl: de Grenzrenditn vo Eahnam nächstn Beitrogseuro ändat ea ned (∂²Ertrog/∂agz_fix ∂Beitrog ≤ 0, iwa d’Vadrängung ko ea’s sogoar senga), den Duachschnitt hebt ea storg. In da Sensitivitätskurve is ea dadéaweng ungfähr affin — bis da 4-%- bzw. 8-%-Dopf ausgschöpft is, na knickt s’.',
+ 'f.I:agz_fix_dyn.hint': 'Fesde Betreg stengan meistns nominal im Tarifvatrog und werdn bloß bei Tarifrundn aufghebt — Voaeistellung dadéaweng „nominal gleibleibad“. Iwa 27 Jahr bei 2 % Inflazion bleibt davo da Faktor 1,02⁻²⁷ ≈ 0,59 iwrig; wea des zvui pessimistisch findt, schoit auf „mit’m Gehalt“ um und griagt an realn Zuaschuss mit da Wochstumsrotn gsteig − infl.',
+ 'f.I:agzus_sv.hint': '„Gnau grechnet“ is da Gesetzeswoatloit: § 1a Abs. 1a BetrAVG schuidt an Zuaschuss bloß, SOWEIT da Arbeitgeba tatsächlich Sozialobgom espoart. Liegt Eahna Entgelt iwa boade Beitrogsbemessungsgrenzn, espoart ea nix und schuidt nix. Dadéaweng sättigt da Regla driwa im Basisfoi bei rund 21 %. „Ganza Beitrog“ is a freiwilligs oda tarifvatroglichs Vaspreng, „bloß da freie Teil“ de vabreitete pauschale Praxis. Vatraunsgrad vo da gnaua Lesoart ca. 75 %.',
+ 'f.I:dyn.hint': 'Steigt da Beitrog mit da Gehaltssteigarung, bleibt d’Ausschepfung vom 8-%-Dopf iwa de Jahr ungfähr gleich. Bleibt ea nominal gleichbleibad, sinkt sei reala Weat mit da Inflazion — und da Nettoaufwand, den de zwoa andan Mégglichkeitn zum Vagleich griagn, sinkt mit.',
+ 'f.I:rendite.hint': 'Voar Kostn, voar Steian. In olle drei Mégglichkeitn da gleiche ETF — bloß so vagleicht ma Fördararchitekturn statt Aunlogeentscheidunga.',
+ 'f.I:alter.hint': 'Aufangspunkt vo da Auspoarphas. Kalendajahr 0 = 2026.',
+ 'f.I:rentbeg.hint': 'Aufang vo da Auszoihungsphas vo olle drei Mégglichkeitn. ’s Altersvorsorgedepot is frühestns ab 65 auszoihboar (Reform 2026).',
+ 'f.I:kv_ruhe.hint': 'Da entscheidande Hebl. In da gsetzlichn Krankakassa san Betriebsrentn Versorgungsbezüge und drong den ganzn Beitrogssotz (§§ 229, 250 SGB V); private Oitersvuasorg ned. Bloß dé Eistellung drahts Ergebnis um.',
+ 'f.I:auszform.hint': 'Kapital: im Zuflussjahr voi steiapflichtig, KV-Beitreg auf 120 Monat vateilt (§ 229 Abs. 1 S. 3 SGB V). D’Rentn streckt an Bezug auf de Restlebenszeit und schiamt dadéaweng a Vuifachs an Kapital unta demsejbm Freibetrog. ’s Modej kennt bloß ganz oda goar ned; a Teilkapitalisiarung vo da bAV is ned obgebildt.',
+ 'f.I:teilkap.hint': 'Bis 30 % vom auggspoartn Kapital san am Aufang vo da Auszoihungsphas ois Eimalbetrog mégglich — in boade Auszoihungsformen. Ea kost aus zwoa Gründ: voie Progression im Zuflussjahr und donoch nua no da Zinssotz noch da Obgeltungssteia. Da Iwaschuss iwan Jahreshöchstbetrog („Sleeve“) werd ohne Eimalbetrog varentat; des is a Modejkonvention, koa Rechtssotz.',
+ 'f.I:av_auszform.hint': 'Wos mim Kapital jenseits vom Eimalbetrog passiat — unobhängig vo da bAV-Entscheidung driwa. Auszoihungsplan: ’s Geid bleibt investiat und werd mit Zins entnomma; de ned gferderte Schicht werd mim hoibn Untaschiedsbetrog bsteiat. Rentn a Lebn lang: ’s Kapital geht an Aunbieta, dafia werd de ned gferderte Schicht bloß mim Ertrogsanteil bsteiat (§ 22 Nr. 5 S. 2 Buchst. a EStG, 17 % ab Oida 67 statt do rund 26 %). D’gferderte Schicht is in boadn Fäj voi nochglagat steiapflichtig, des ändat si ned.',
+ 'f.I:agz_fix_min.hint': 'Matching-Modej koppln an Fesdbetrog an a Mindest-Eigaleistung („wea mindestns X umwandlt, griagt Y“). 0 hoaßt ohne Bedingung — na fliaßt da Zuaschuss in jedm aktivn Jahr, aa bei Beitrog nui. Aufpassn auf de Modejsemantik: a wirklich ohne Bedingung Zuaschuss war koa Untaschiedseffekt vo da Umwandlungsentscheidung und schlaget si beim Vagleich zguntstn vo da bAV zu Buach, obwoi ea aa ohne Umwandlung flietat. Bloß des eitrogn, wos tatsächlich an da Teilnahm hängt.',
+ 'f.I:rentfak_av.hint': 'Bloß bei Varentung vom Depot. Voaeistejt wia bei da bAV; a Depotvatrog kimmt ohne Vasicharungsmantel aus und ko dadéaweng günstiga sei — den Weat aus’m konkretn Angebot eitrogn. Bei 0 gibt’s koa Rentn.',
+ 'f.I:rentdyn_av.hint': 'Iwaschussbeteiligung bzw. Fondsentwicklung in da Rentnphas vom Depotvatrog.',
+ 'f.I:rentfak.hint': 'Bloß bei Auszoihungsform „Rentn“. 26 € Monatsrentn je 10.000 € entspricht ca. 3,1 % Entnahmquotn. Steht im Produktinformationsblott.',
+ 'f.I:rentdyn.hint': 'Iwaschussbeteiligung bzw. Fondsentwicklung in da Rentnphas.',
+ 'f.I:fuenftel.hint': '§ 34 EStG is bei planmäßiga Kapitalobfindung aus § 3 Nr. 63-Vatreg noch BFH X R 23/15 bloß ausnahmswois auwendboar. Vuasichtig: na.',
+ 'f.I:planende.hint': 'Auszoihungsplän laffn bis daher. Rentn a Lebn lang werdn iwan gleichn Horizont vaglichn; wos donoch no fliaßt, steht ois Memo unta „Diagnos“. Wea oid werd, gwinnt dert.',
+ 'f.I:ausscheid.hint': 'Ab do koa Gehalt und koane Beitreg mehr. ’s Kapital vazinst si weida bis zum Auszoihungsaufang.',
+ 'f.I:tzalter.hint': 'Jeda Weat ab’m Auszoihungsaufang hoaßt: koa Teilzeit. Voaeistejt is dadéaweng 67.',
+ 'f.I:tzfaktor.hint': 'Aunteil vom Vuizeitgehalt. 60 % = 60-%-Stej.',
+ 'f.I:gsteig.hint': 'Schreibt aa d’Beitrogsbemessungsgrenzn, de Bezugsgröße, ’s Duachschnittsentgelt und an Rentnweat weida foat.',
+ 'f.I:stkl.hint': 'Entscheidend is d’VERONLOGUNGSOART, ned de Loahnsteiaklass: d’Klass stuat bloß an unterjährigan Obzug, da Jahresbescheid rechnat sowiso mit Splitting noch § 32a Abs. 5 EStG. Bei „zamm“ unbedingt ’s zvE vom Partna eitrogn.',
+ 'f.I:partner.hint': 'Bloß bei zammer Veronlogung. Grechnat werd 2·ESt((zvE + zvE_Partna)/2).',
+ 'f.I:kist.hint': '8 % in Bayern und Baden-Württemberg, sunst 9 %, 0 bei Austritt aus da Kiacha. Wirkt aa auf de Obgeltungssteia: 0,25/(1+0,25k)·(1+0,055+k).',
+ 'f.I:tarifanp.hint': 'Da ganze Tarif werd um an Faktor λ = (1+x)^t gstreckt: ESt = s·λ·T(zvE/s/λ). Des is gnau äquivalent zu ana proportionaln Vaschiabung vo olle Eckweat. 0 % zoagt voie koide Progression.',
+ 'f.I:kinder.hint': 'Kinderzualoag im Altersvorsorgedepot: 1 € je eizoihtn €, bis 300 € je Kind.',
+ 'f.I:kind_jahre.hint': 'D’Kinderzualoag hängt am Kindergeldaspruch (§ 85 EStG), laft ois ned iwa de ganze Auspoarphas.',
+ 'f.I:kinderlos.hint': '0,6 Prozentpunkt Zuaschlog zua Pflegvasicharung, bloß vom Arbeitnehma zum trong (§ 55 Abs. 3 SGB XI).',
+ 'f.I:k_bav.hint': 'Vasicharungsmantel plus TER. D’effektivn Kostn steng im Produktinformationsblott — dert nochschaung, ned schätzn.',
+ 'f.I:k_av.hint': 'Beim Standarddepot san d’effektivn Kostn gsetzlich auf 1,0 % im Jahr deckelt.',
+ 'f.I:k_priv.hint': 'Reine TER vo an breidn Welt-ETF.',
+ 'f.I:infl.hint': 'Diskontiarungssotz fian olle Ogom „in heitiga Kaffkraft“. Ändat de Rangordnung kaam, oba olle Niveaus.',
+ 'f.I:sonst_zve.hint': 'Voar oim da steiapflichtige Teil vo da gsetzlichn Rentn, ohne de do vaglichanan Produkt. Bestimmt an Grenzsteiasotz in da Auszoihungsphas — und dadéaweng d’Tarifarbitrasch t₀ − t₁.',
+ 'f.I:rente_br.hint': 'Bloß fian Deckl in da Krankakassa: gsetzliche Rentn und Versorgungsbezüge teiln si a EIZIGE Beitrogsbemessungsgrenz (§ 223 Abs. 3 SGB V).',
+ 'f.P:bbg_rv.hint': 'SVBezGrV 2026 (BGBl. 2025 I Nr. 116), bundeseinheitlich.',
+ 'f.P:bbg_kv.hint': 'SVBezGrV 2026; 5.812,50 € monatlich.',
+ 'f.P:bezug.hint': 'SVBezGrV 2026, 47.460 € jährlich. A Zwaanzigstl davo is da Freibetrog fia Versorgungsbezüge in da KV (§ 226 Abs. 2 S. 2 SGB V).',
+ 'f.P:de_rv.hint': 'Aunlog 1 zum SGB VI, Weat 2026 — Nenna fian Entgeltpunkt.',
+ 'f.P:rw.hint': 'Rentenwertbestimmungsverordnung 2026, ab’m 1.7.2026: 42,52 € (+4,24 %).',
+ 'f.P:rv_an.hint': '18,6 %, hoib und hoib.',
+ 'f.P:av_an.hint': '2,6 %, hoib und hoib.',
+ 'f.P:kv_allg.hint': '§ 241 SGB V.',
+ 'f.P:kv_zus.hint': 'Bekanntmochung vom BMG; kassnobhängig unterschiedlich — an Sotz vo Eahnare Kassa eitrogn.',
+ 'f.P:pv_ges.hint': '§ 55 SGB XI. Kinderobschleg ab’m zwoatn Kind san ned modejliart.',
+ 'f.P:pv_an.hint': 'In Sachsn unterschiedlich (2,3 %).',
+ 'f.P:pv_kl.hint': '§ 55 Abs. 3 SGB XI, bloß vom Arbeitnehma.',
+ 'f.P:gfb.hint': '§ 32a Abs. 1 EStG in da Fassung vom Steuerfortentwicklungsgesetz.',
+ 'f.P:e2.hint': 'Grenzsteiasotz steigt vo 14 % auf 23,97 %.',
+ 'f.P:e3.hint': 'Grenzsteiasotz steigt vo 23,97 % auf 42 %.',
+ 'f.P:e4.hint': 'Ab 277.826 € gilt 45 %.',
+ 'f.P:a2.hint': 'ESt = (a₂·y + b₂)·y mit y = (zvE − Grundfreibetrog)/10.000.',
+ 'f.P:a3.hint': 'ESt = (a₃·z + b₃)·z + c₃ mit z = (zvE − 17.799)/10.000.',
+ 'f.P:c4.hint': 'ESt = 0,42·zvE − c₄.',
+ 'f.P:c5.hint': 'ESt = 0,45·zvE − c₅.',
+ 'f.P:soli.hint': 'SolzG 1995.',
+ 'f.P:soli_fg.hint': '2026, Grundtarif, bezong auf de festgsetzte ESt; beim Splitting duppelt. Danem a Mildarungszone.',
+ 'f.P:soli_mz.hint': '§ 3 Abs. 2a SolzG.',
+ 'f.P:an_pausch.hint': '§ 9a S. 1 Nr. 1a EStG.',
+ 'f.P:sa_pausch.hint': '§ 10c EStG.',
+ 'f.P:kapst.hint': '§ 32d Abs. 1 EStG.',
+ 'f.P:tfs.hint': '§ 20 Abs. 1 Nr. 3 i.V.m. § 20 InvStG, Aktienfondsaunteil iwa 50 %.',
+ 'f.P:sparerpb.hint': '§ 20 Abs. 9 EStG; beim Splitting vaduppelt. Ssaugt an großn Teil vo da Vorabpauschale auf — schau Weattreiba.',
+ 'f.P:basiszins.hint': 'BMF-Schreim vom 13.01.2026, § 18 Abs. 4 InvStG (2025: 2,53 %). Auf 0 stejn hoaßt: koa Vorabpauschale.',
+ 'f.P:vp_faktor.hint': '§ 18 Abs. 1 S. 1 InvStG.',
+ 'f.P:st_frei_q.hint': '8 % vo da BBG-RV = 8.112 € in 2026.',
+ 'f.P:sv_frei_q.hint': '§ 1 Abs. 1 S. 1 Nr. 9 SvEV; 4 % = 4.056 € in 2026. Zugleich de Grenz vom Rechtsaspruch noch § 1a BetrAVG.',
+ 'f.P:zul_g1.hint': 'Altersvorsorgereformgesetz, in Kroft seit Mai 2026, Auwendung ab’m 1.1.2027.',
+ 'f.P:zul_s1.hint': 'Bis 360 € Eigabeitrog: 50 Cent je €.',
+ 'f.P:zul_g2.hint': 'Vo 361 bis 1.800 €: 25 Cent je €.',
+ 'f.P:zul_s2.hint': 'Höchstbetrog vom gferdertn Eigabeitrog; ergibt a maximale Grundzualoag vo 540 €.',
+ 'f.P:kind_zul.hint': '1 € je eizoihtn €, bis 300 € je Kind.',
+ 'f.P:av_max.hint': 'BMF-FAQ zua Reform vo da gferdertn privatn Oitersvuasorg, Stand 05.05.2026. Wos driwa liegt, laft in a Nebnschian, de wia a Privatdepot bsteiat werd.',
+ 'f.P:av_sa_max.hint': 'MODEJANAHM, Vatraunsgrad ca. 70 %. Eigabeitrog bis 1.800 € plus Zualoagn. Dé oane Zoi entscheidt, ob a Kind an Weat vom AV-Depot hebt oda senkt.',
+ 'f.P:ertragsq.hint': '§ 22 Nr. 1 S. 3 Buchst. a Doppelbuchst. bb EStG, fia ned gferderte Rentnaunteil.',
+ 'f.P:halb.hint': '§ 20 Abs. 1 Nr. 6 S. 2 EStG analog (Vatrog iwa 12 Jahr, Auszoihung noch 62): hoiba Untaschiedsbetrog. Vatraunsgrad ca. 80 %.',
+
+ /* ---------------- Allgemeina Text, Fußzein, Kennzoihn ---------------- */
+ 'app.meta': 'Betriebliche Oitersvuasorg, Altersvorsorgedepot und privats ETF-Depot bei gleichm Nettoaufwand vagleichn. Rechtsstand 2026.',
+ 'hdr.sub': 'Betriebliche Oitersvuasorg, Altersvorsorgedepot und privats ETF-Depot &mdash; bei <b>gleichm Nettoaufwand</b> und mit demsejbm ETF. Rechtsstand 2026.',
+ 'input.sub': 'D’Zoihn rechnan si bei jeda Ändarung sofuat nei aus. Mit <span class="qm" style="cursor:default">?</span> erklärt si jeds Feld sejba.',
+ 'extra.sub': 'Ois do hod sinnvolle Voaeistellunga. Bloß aufassn, wenn’s auf Eahna zuadrifft.',
+ 'calc.sub': 'Fia oi, de’s nochvoizioang wuin.',
+ 'share.sub': 'Eahnare Ogom liang ausschließlich in dem Browser (<kbd>localStorage</kbd>). Nix werd iwatrong, es gibt koan Server und koan Tracker.',
+ 'footer.1': '<b>Koa Steia- oda Aunlogeberodung.</b> A Modej is koa Vatrog. D’Rechtslogn 2026 zua reformiatn privatn Oitersvuasorg is a mehrare Stelln no ned endgültig gklärt; de Aunahma mit’m niadrigstn Vatraunsgrad steng unta „Rechawég → Belastborkeit vo de Aunahma“ und san dert aa zum ändan.',
+ 'footer.2': 'Rechnakern oans zu oans iwatrong aus’m Excel-Modej <span class="pill">bAV-DYNO_vs_Altersvorsorgedepot_vs_ETF.xlsx</span> und gengan drei Testfäj auf Maschinngenauigkeit prüaft (grössde relative Obweichung 1,3·10<sup>&minus;14</sup>).',
+ 'metric.monat.desc': 'Konstante Monatszoihung iwa de ganze Auszoihungsphas mit demsejbm Weat, in heitiga Kaffkraft. De oazige Zoi, de si direkt mit Eahnam heitign Nettoeikomma vagleichn lasst.',
+ 'metric.ertrag.desc': 'Wos de Mégglichkeit in heitiga Kaffkraft iwa an eignan Eisotz aussi obwirft: Barweat vo olle Netto-Leistunga minus Barweat vom Nettoaufwand.',
+ 'metric.irr.desc': 'Renditn auf an tatsächlich eigsetztn Nettobetrog, nominal. Direkt vagleichboar mit da eigstejtn Bruttorenditn vom ETF — da Untaschied is gnau des, wos Fördarung und Obgom zsamm kostn oda bringan.',
+ 'metric.kapital.desc': 'Voar Steian und voar Sozialobgom, nominal. Mit Absicht NED de Entscheidungsgréß: de bAV führt do oft, valiat oba bei da Auszoihung.',
+ 'ui.couple': '<span>⇅</span> Zwoa Sichtweisn auf de gleiche Gréß. Ändan Eahna de oane, foigt de aundre.',
+ 'ui.legalNote': 'Gsetzliche Greßn mit Fundstej. Bloß ändan, wenn si ’s Recht gändat hod oda Eahnare Kassa unterschiedlich is.',
+
+ /* ---------------- Bedingte Aumerkunga bei de Regla ---------------- */
+ 'n.beitrag.ueber8': function(p, f){
+ return 'Iwa 8 % vo da Beitrogsbemessungsgrenz RV (' + f.eur(p.v8) + ' im Jahr). Da Teil driwa '
+ + 'is wéeda steia- no sozialobgomsbegünstigt — ea wandat in an Vasicharungsmantel und griagt '
+ + 'si dert bloß de Beitrogspflicht in da Krankakassa.'; },
+ 'n.beitrag.ueber4': function(p, f){
+ return 'Iwa 4 % vo da Beitrogsbemessungsgrenz RV (' + f.eur(p.v4) + ' im Jahr). Bis daher '
+ + 'hobts an Rechtsaspruch noch § 1a BetrAVG, driwa brauchts d’Zuastimmung vom Arbeitgeba.'; },
+ 'n.agzus.gedeckelt': function(p, f){
+ return 'Deckelt bei ' + f.pct(p.quote, 1) + '. Da Arbeitgeba espoart tatsächlich bloß '
+ + f.eur2(p.ersparnis) + ' im Jahr — héecha Weat ändan do nix, so long da Zuaschussmodus '
+ + '„gnau grechnet“ bleibt.'; },
+ 'n.agz_fix.fliesstNicht': function(p, f){
+ return 'Fliaßt ned: Eahna Monatsbeitrog vo ' + f.eur2(p.beitrag) + ' liegt unta da '
+ + 'Mindestschwej vo ' + f.eur2(p.schwelle) + ' (Feld unta „Weidare Ogom“).'; },
+ 'n.agz_fix.ueber4': function(p, f){
+ return 'Da fesde Zuaschuss ollaoa iwaschreit’n 4-%-Dopf (' + f.eur(p.topf)
+ + ' im Jahr) um ' + f.eur(p.ueber) + '. Dea Teil war bei Eahna beitrogspflichtigs '
+ + 'Arbeitsentgelt — ’s Modej rechnat de zsätzliche Beitrogslast NED gegen und iwaschätzt '
+ + 'd’bAV insoweit.'; },
+ 'n.agz_fix.verdraengung': function(p, f){
+ return 'Bsetzt an 4-%-Dopf voarrangig: vo Eahnam eignan Beitrog bleim nua no '
+ + f.eur(p.rest) + ' sozialobgomfrei. Eahna Nettoaufwand steigt dadéaweng — da Zuaschuss '
+ + 'is trotzdem gschenkts Geid, ea vaschiabt bloß de Grenz vo da eignan Fördarung.'; },
+ 'n.agz_fix.ueber8': 'Zsamm mit’m eignan Beitrog iwa 8 % vo da BBG-RV — da Iwahang is wéeda steia- no beitrogsbegünstigt.',
+ 'n.agz_fix_min.knapp': function(p, f){
+ return 'Eahna liegts bloß ' + f.eur2(p.d) + ' iwa da Schwej. Drunta foit da fesde Zuaschuss '
+ + 'komplett weg: de Grenzrenditn vom letztn Beitrogseuro is do unendlich, d’Kopplung '
+ + 'Brutto ↔ Netto dert unstetig.'; },
+ 'n.agz_fix_min.verfehlt': function(p, f){
+ return 'Schwej ned dawischt — ' + f.eur2(p.fehlt) + ' mehr im Monat lesn ' + f.eur2(p.zuschuss)
+ + ' Zuaschuss aus. Des is fost immer da lohnendste Euro im gaunzn Modej.'; },
+ 'n.teilkap.kosten': function(p, f){
+ return 'Kost ' + (p.gewinn ? 'nix, im Gengteil: ' + p.dtxt : p.dtxt + ' ' + p.unit)
+ + ' gengan reine Varentung. Grund: ’s Eimalbetrog is im Zuflussjahr voi steiapflichtig '
+ + '(Grenzbelastung dert ' + f.pct(p.grenz, 1) + ') und vazinst si donoch nua no mim Sotz '
+ + 'noch da Obgeltungssteia statt mit da Produktrenditn.'; },
+ 'n.av_auszform.horizont': function(p, f){
+ return 'Iwan Vagleichshorizont aussi zoiht dé Rentn no ' + f.eur(p.rest)
+ + ', de do NED mitgrechnat werdn. A fesda Horizont unterschätzt jede Rentn a Lebn lang '
+ + 'systematisch — wea oid werd, gwinnt do.'; },
+ 'rank.swap': function(p, f){
+ return '<b>D’Kennzoihn san si ned eanig.</b> Noch da Monatsleistung liegt '
+ + p.a + ' voar ' + p.b + ', noch’m Barweat vom Netto-Ertrog is umgekeahrt. '
+ + 'Grund: da Barweat abzinst mit da Inflazion (' + f.pct(p.infl, 2) + '), de Monatsleistung '
+ + 'varentat mim Wiedaaloagzins noch Steian (' + f.pct(p.wiederanl, 2) + '). Je weida boade '
+ + 'auseinandaliang, desto bessa steht a friahe Kapitalauszoihung do. Weiche Kennzoi gilt, '
+ + 'hängt davo o, ob Eahna ’s Geid aunloang oda ausgem tatn — bei „ausgem“ an Weat im Feld '
+ + '„Kostn privats ETF-Depot“ so setzn, dass da Wiedaaloagzins gengan nui geht.'; },
+ 'warn.unreachable': 'Dea Nettoaufwand is ned dawischboar — ea iwaschreit Eahna Gehalt. Eigstejt is da héechste mégliche Weat.',
+ 'warn.inactive': 'Im easchtn Jahr sans noch Eahnare Ogom ned mehr in Arbeit — es gibt koa Entgeltumwandlung, ois aa koan Nettoaufwand, zu dem si a Bruttobeitrog zruckrechna lasset. Prüafts „Ausscheidn ausm Job“ und „Oida heit“.',
+ 'verdict.lead': function(p){
+ return '<b>' + p.satz + '</b> liegt voarn mit ' + p.wert + ' — ' + p.d2 + ' mehr wia ' + p.nom2
+ + (p.nom3 ? ' und ' + p.d3 + ' mehr wia ' + p.nom3 : '') + '.'; },
+ 'verdict.top': function(p, f){
+ return ' An gréßtn Eizlpostn im Obstand ' + p.gen + ' zum privatn ETF-Depot bildt „' + p.label
+ + '“ — und zwoa ' + (p.pro ? 'zguntstn vo' : 'zlastn vo') + ' ' + p.gen
+ + ', mit ' + f.eur(p.wert) + ' Barweat. D’vollständige Zaleggung steht unta „Weattreiba“.'; },
+ 'verdict.band': function(p, f){
+ return '<span class="band">Wia belastboar is des? Bei ana Bruttorenditn vo ' + f.pct(p.lo, 1)
+ + ' statt ' + f.pct(p.mid, 1) + ' waren’s ' + p.vlo + ', bei ' + f.pct(p.hi, 1) + ' waren’s '
+ + p.vhi + ' — d’Rangordnung '
+ + (p.stabil ? 'bleibt in dera Spann de gleiche.'
+ : '<b>drahd si in dera Spann um</b>, ’s Ergebnis trogt do ois ned.')
+ + '</span>'; },
+ 'demo.text': '<b>Des san no Beispiiwweat</b> — 40 Jahr oid, 75.000 € Jahresbrutto, 300 € Entgeltumwandlung im Monat, gsetzlich krankenvasichat. Trogts unta „Eahnare Ogom“ Eahnare eigana ei; dea Hiwois vaschwindt na vo sejba.',
+ 'sens.readout': 'Gstrichlt: Eahna aktuella Weat. Ringe: Schnittpunkt mit’m Privatdepot. Iwa d’Kurve foahn oda tippn fian Weat.',
+ 'sens.note': function(p){
+ return 'Da letzte bewengte Regla werd iwa sei ganze Spann duachgrechnat — ' + p.n
+ + ' vollständige Modejläuf. Aktuell: „' + p.label + '“. '
+ + 'Bewengts an andan Regla, wechslt d’Kurve mit.'; },
+ 'sens.noteNetto': function(p, f){
+ return ' Aufpassn: dea Regla ändat aa an Nettoaufwand (do ' + f.eur2(p.lo) + ' bis '
+ + f.eur2(p.hi) + ' im Monat) und dadéaweng an Betrog, dea in olle drei Mégglichkeitn '
+ + 'investiat werd. Dadéaweng san de drei Kurvn bei jedm eizlnan x fair vagleichboar, ’s '
+ + 'Niveau zwischn verschiedanan x oba ned. D’Knick sitzn bei de Beitrogsbemessungsgrenzn ('
+ + f.eur(p.bbgkv) + ' fia KV/PV, ' + f.eur(p.bbgrv) + ' fia RV/AV) und bei de Tarifeckweat.'; },
+ 'wf.check': function(p, f){
+ return 'Prob: ' + f.eur(p.start) + ' + ' + f.eur(p.summe) + ' = ' + f.eur(p.start + p.summe)
+ + ' (soit ' + f.eur(p.ende) + ' sei, Obweichung ' + f.nf2(p.start + p.summe - p.ende) + ' €).'; },
+ 'wf.note': 'Teleskopiarende Zaleggung, dadéaweng geht’s gnau auf — oba sé is <b>reihafolgeobhängig</b>: d’Effekt san ned additiv trennboar, jeda Boikn misst an Beitrog <i>gegm</i> de driwaliangadn. Tippts an Boikn fia d’Healeitung.',
+ 'wfb.vp.note': 'Wéeda bAV no Altersvorsorgedepot kenna de Vorabpauschale (§ 18 InvStG). Gmessn ois Privatdepot ohne Vorabpauschale minus mit. Da Boikn ko negativ sei: de Vorabpauschale laft zu am großn Teil in an Sparer-Pauschbetrog, hebt oba in voia Héecha d’Kostnbasis — na is s’ fian Privatdepot netto a Vuateil.',
+ 'wfb.zul.note': 'Fremdgeid noch’m neichn Zualoagnmodej plus da Obzug noch § 10a EStG. Gmessn duach Obschoitn vo boadn Fördarwegn.',
+ 'wfb.arch.note': 'Tarifarbitrasch t₀ − t₁ und ois Iwrige. Restwert bestimmt, dass d’Kette gnau aufgeht.',
+ 'wfb.agz.note': 'Fremdgeid — dea eizige struktureie Vuateil vo da bAV, dea ned aus’m Steiarecht kimmt. Gmessn duach Obschoitn vom Zuaschuss.',
+ 'wfb.tarif.note': 'Grenzsteiasotz beim Eizoihn minus beim Auszoihn, plus ois Iwrige. Restwert bestimmt, dass d’Kette gnau aufgeht. Steieraufschub ollaoa is nix weat: (1−t)(1+r)ⁿ = (1+r)ⁿ(1−t), Multiplikation kommutiat.',
+ 'wfb.kvpv.note': '§§ 229, 250 SGB V: an ganzn Beitrogssotz drogt da Rentna ollaoa. Gmessn ois Untaschied zua Eistellung „PKV im Ruahstand“.',
+ 'wfb.ep.note': 'Entgeltumwandlung mindat ’s beitrogspflichtige Entgelt und dadéaweng de gsetzliche Rentn. Netto gegngrechnat.',
+ 'kap.readout': function(p, f){
+ return 'Beim Rentnaufang bundn: bAV ' + f.eur(p.bavGeb) + ' vo ' + f.eur(p.bav)
+ + ' · AV-Depot ' + f.eur(p.avGeb) + ' vo ' + f.eur(p.av)
+ + ' · privats Depot ' + f.eur(0) + ' vo ' + f.eur(p.priv)
+ + '. D’äquivalente Monatsleistung werd vabraucht, dadéaweng endt jede Mégglichkeit bei nui.'; },
+ 'kap.note': function(p, f){
+ return 'Kontostand im Produkt, in da Auszoihungsphas zsätzlich de netto wieda aungloagtn '
+ + 'Auszoihunga (' + f.pct(p.wiederanl, 2) + ' noch Steian) und obzüglich de äquivalente '
+ + 'Monatsleistung, de tatsächlich vabraucht werd. Dadéaweng laft jede Mégglichkeit gnau auf '
+ + 'nui. Wei da Vabrauch bloß aus da Wiedaaloag obgeht und ’s Produktkapital im Produkt '
+ + 'bleibt, wo’s mit da Produktrenditn voar Steian wochst, laffn d’Kurvn trotzdem ned '
+ + 'proportional. — De gstrichlte Linie is da frei vafiagboare Teil: de bAV is bis zum '
+ + 'Rentnaufang voi bundn (§ 1b BetrAVG kennt Unvafoinbarkeit, ned Vafiagborkeit), beim '
+ + 'Altersvorsorgedepot is a Entnahm voar 65 fördarschädlich und frei bloß da Iwaschuss iwan '
+ + 'Jahreshöchstbetrog, ’s Privatdepot is imma frei. Des is de eizige Achs, auf dea a '
+ + 'Kapitalauszoihung guat ausschaut. '
+ + (p.verrentet ? 'Wei Eahna ’s Depot varentn, geht aa dert ’s Kapital an Aunbieta — de '
+ + 'Kurve foit dementsprechend, obwoi nix valuan geht. ' : '')
+ + 'Und no oamoi ausdrücklich: de Kurvn zoang ’s Vamögn aus DEA oanan Entscheidung, ned '
+ + 'Eahna Gesamtvamögn.'; },
+ 'zer.readout': 'Ois ois konstante Monatsleistung in heitiga Kaffkraft. Wei Vazinsung linear is, addiarn si de Bleck gnau auf.',
+ 'zer.note': function(p, f){
+ return 'Da Bezugszeitraum is fia olle drei Mégglichkeitn identisch. A Kapitalauszoihung werd '
+ + 'ned duach zwöif geteilt, sondan mim Wiedaaloagzins noch Steian (' + f.pct(p.wiederanl, 2)
+ + ' im Jahr) auf denselbn Zeitraum varentat. Wea ’s Kapital vakonsumiat statt aunzuloang, '
+ + 'steht schlechta do.'; },
+ 'det.warn.lead': 'Eahna liegts außahoib vom begünstigtn Korridor: ',
+ 'det.warn.aussch': 'Iwa 100 % Ausschepfung gibt’s koan Rechtsaspruch mehr auf Entgeltumwandlung. ',
+ 'det.warn.ngef': 'A spürboara Teil vo de Beitreg is wéeda steia- no sozialobgomsbegünstigt — dé Schicht wandat in an Vasicharungsmantel, ohne dafia wos zum griang außa da Beitrogspflicht in da KV. ',
+ 'det.warn.vb': 'Da Versorgungsbezug iwaschreit’n Freibetrog deitlich; de Schutzwirkung vom absolutn Freibetrog sinkt wia 1/Kapital. ',
+ 'det.ann.intro': 'D’Rangordnung hängt o Rechtsfrong, de 2026 no ned oi gklärt san. D’Zoihn in Klammern san subjektive Vatraunsgrad.',
+ 'det.ann.notmodelled': '<b>Ned modejliart:</b> Obschleg bei friazeitigm Rentnbezug, Wirkung vo da Entgeltumwandlung auf Krankn-, Arbeitslosn- und Ejtangeid, Hintabliebanenvasorgung, Insolvenzsichrung (PSVaG), Portabilität bei am Arbeitgebawechsl, Kinderobschleg in da PV, Günstigapröafung noch § 32d Abs. 6 EStG, Pfändungs- und Grundsichrungsschutz, Longlebnsrisiko iwan Horizont aussi.',
+ 'det.prinzip': '<p>A Vagleich vo <i>Bruttobeitreg</i> war ned fair: Entgeltumwandlung kimmt aus’m Brutto, privats Sporn aus’m Netto. Dadéaweng werd da <b>Nettoaufwand</b> gleichgsetzt:</p>'
+ + '<p style="font-family:var(--mono);font-size:.82rem;background:var(--chip);padding:9px 11px;border-radius:9px">Nettoaufwand = Bruttobeitrog − Loahnsteia-Espoarnis − espoarta AN-Aunteil zua Sozialvasicharung</p>'
+ + '<p>Gnau dea Betrog werd in olle drei Mégglichkeitn investiat. Wos iwrig bleibt, is a Vagleich vo <i>Fördararchitekturn</i>, ned vo de Eizoihungshéechn.</p>'
+ + '<p><b>Steieraufschub fia si gnomma is nix weat:</b> (1−t)·(1+r)ⁿ = (1+r)ⁿ·(1−t). Multiplikation kommutiat. Do bleim nua via Weattreiba:</p>'
+ + '<ol style="padding-left:1.2em;margin:.3em 0"><li>Tarifarbitrasch t₀ − t₁</li>'
+ + '<li>Fremdgeid — Arbeitgebazuaschuss bzw. Zualoagn</li>'
+ + '<li>steiafreie Thesauriarung — koa Vorabpauschale</li>'
+ + '<li>neiche Obgom, de bloß a oanzige Mégglichkeit trefft — KV/PV auf Versorgungsbezüge</li></ol>'
+ + '<p>Punkt 4 is da dominante Nochteil vo da bAV, Punkt 2 ea eizige struktureie Vuateil. D’Renditn vo da bAV <b>sinkt streng monoton mit da Beitrogshéech</b>, wei da Freibetrog absolut is und sei Schutzwirkung wia 1/K obnimmt — es gibt koa inners Optimum.</p>'
+ + '<p>Bei Voagob vom Nettoaufwand werd da Bruttobeitrog duach Hoibiarung zruckgrechnat: N(B) is stetig und streng monoton wochsad (dN/dB = 1 − Grenz-SV-Sotz − Grenzsteiasotz > 0), wegn de Knick bei 4 % und 8 % vo da BBG-RV, bei de Beitrogsbemessungsgrenzn und bei de Tarifeckweat oba ned gschlossn umkeahrboar. 34 Hoibiarunga liaferan unta am Zehndl Cent.</p>',
+ 'det.s.erg': 'Olle drei Mégglichkeitn kostn in da Auspoarphas gnau denselbn Betrog aus’m Netto.',
+ 'det.s.mon': 'Olle Mégglichkeitn iwan gleichn Zeitraum varentat, in heitiga Kaffkraft. Wei Vazinsung linear is, addiarn si d’Zein gnau auf.',
+ 'det.s.diag': 'Woro’s liegt — und wo Eahna außahoib vom begünstigtn Korridor steng.',
+ 'msg.linkCopied': 'Link kopiat. Wea an aufmocht, siacht gnau dé Zoihn — nix davo laft iwa an Server.',
+ 'msg.linkFailed': 'Kopiarn hods ned funktioniat. Da Link steht etz in da Adresszein.',
+ 'pwa.offline': '<b>Offlinefähig.</b> D’App liegt etz im Browser-Cache und laft aa ohne Vabindung. Zum Installian: aufm iPhone „Teiln“ → „Zum Hoambildschirm“, auf Android ’s Menü → „App installian“.',
+ 'pwa.installAsk': '<b>Ois App installian?</b> Na liegt’s mim eignan Symbol aufm Startbildschirm und laft offline. ',
+ 'pwa.declined': 'Ois kloa — d’App laft aa so, und zwoa offline.',
+ 'pwa.file': '<b>Eahna hobts d’Datei direkt aufgmocht</b> (<kbd>file://</kbd>). Ois rechnat, ois werd gspeichat. Bloß de zwoa PWA-Eignschoftn fehln: koa Symbol aufm Startbildschirm und koa Offline-Cache — des braucht’s do aa ned, de Datei liegt jo scho auf’m Gerät. Fian voi App-Erlebnis an Ordna auf an beliebign HTTPS-Webspace lang und vo dert aufmochn.'
+};
diff --git a/app/i18n.de-x-amt.js b/app/i18n.de-x-amt.js
new file mode 100644
index 0000000..c5b420d
--- /dev/null
+++ b/app/i18n.de-x-amt.js
@@ -0,0 +1,607 @@
+/* =====================================================================
+ Wörterbuch Deutsch, Register „Amtsdeutsch" (BCP 47 § 2.2.7,
+ privater Untertag de-x-amt) — VOLLSTÄNDIG (459 Schlüssel).
+
+ Keine Übersetzung, sondern eine Stilvariante derselben Sprache: exakt
+ dieselben Zahlen, Formeln und Paragraphen wie im Wörterbuch Deutsch
+ (i18n.de.js), aber in der Diktion eines Verwaltungsschreibens —
+ Passiv, Nominalstil, „es wird gebeten", „gemäß", „im Sinne von",
+ „vorbehaltlich", Amtsabkürzungen (bzw., ggf., i.d.R., vgl.), keine
+ Ausrufezeichen, keine Anrede in der zweiten Person Singular. Der Witz
+ liegt im Fließtext: „Der Rechtsanspruch ist bis zur Höhe von vier vom
+ Hundert der Beitragsbemessungsgrenze gegeben" statt umgangssprachlich
+ verkürzt — dieselbe Rechtslage, andere Prosa. Siehe zum Vergleich
+ i18n.de-x-sales.js (Register „Vertrieb"), das denselben § 1a BetrAVG
+ als Werbetext rendert.
+
+ Vertrauensgrad: Es handelt sich um muttersprachliche Stiltransformation,
+ nicht um Übersetzung — die Fehlerquelle „falsches Wort" entfällt. Das
+ einzige Risiko ist Stilbruch (ein zu saloppes Wort in sonst amtlichem
+ Ton); Vertrauensgrad in die Registertreue ca. 90 %.
+ ===================================================================== */
+window.I18N_DE_X_AMT = {
+ 'f.I:gehalt.label': 'Jahresbruttoeinkommen (laufendes Kalenderjahr)',
+ 'f.I:gehalt.hint': 'Einmalzahlungen bleiben unberücksichtigt; ein anteiliges 13. Monatsgehalt ist gegebenenfalls einzurechnen. Der eingetragene Wert ist maßgeblich für die Feststellung des Grenzsteuersatzes sowie für die Feststellung, ob die Beitragsbemessungsgrenzen überschritten werden.',
+ 'f.I:beitrag.label': 'Monatsbeitrag zur bAV, brutto',
+ 'f.I:beitrag.hint': 'Bruttoentgeltumwandlung gemäß § 1a BetrAVG. Ein Rechtsanspruch besteht ausschließlich bis zur Höhe von 4 vom Hundert der Beitragsbemessungsgrenze der Rentenversicherung; für den darüber hinausgehenden Betrag ist die Zustimmung des Arbeitgebers erforderlich.',
+ 'f.I:netto_ziel.label': 'Monatlicher Nettoaufwand',
+ 'f.I:netto_ziel.hint': 'Es handelt sich um den Betrag, um welchen sich das verfügbare Einkommen im ersten Jahr mindert — mithin um den tatsächlich aufgegebenen Konsum und damit um die maßgebliche Entscheidungsgröße im Sinne dieses Vergleichs. Der genannte Betrag wird in sämtlichen drei Gestaltungsvarianten angelegt; dies ist Voraussetzung für die Vergleichbarkeit. Er steht in eindeutigem Zusammenhang mit dem vorstehend genannten Bruttobeitrag: N(B) = B − Ersparnis Sozialversicherung − Steuerersparnis ist streng monoton wachsend und mithin umkehrbar. Eine geschlossene Umkehrung ist wegen der Knickstellen an den Beitragsbemessungsgrenzen und den Tarifeckwerten nicht möglich; es wird daher ein Verfahren mit 34 Intervallhalbierungen angewandt, das eine Genauigkeit unterhalb eines Zehntelcents gewährleistet.',
+ 'f.I:agzus.label': 'Arbeitgeberzuschuss',
+ 'f.I:agzus.hint': 'Das gesetzliche Mindestmaß beträgt 15 vom Hundert (§ 1a Abs. 1a BetrAVG); von zahlreichen Arbeitgebern wird ein höherer Betrag geleistet. Die Gewinnschwelle gegenüber dem privaten Depot liegt näherungsweise dort, wo (1+z)·(1−0,211) ≈ 1 gilt, mithin bei z ≈ 26,7 vom Hundert; dies ist anhand der Sensitivitätskurve nachprüfbar. Im Berechnungsmodus „spitz" ist dieser Wert vielfach nicht erreichbar, da der Zuschuss zuvor die Sättigungsgrenze erreicht.',
+ 'f.I:agz_fix.label': 'Fester Zuschuss, zusätzlich',
+ 'f.I:agz_fix.hint': 'Betragsunabhängiger Festzuschuss aufgrund Tarifvertrags oder Betriebsvereinbarung — etwa bei der Deutschen Bahn sowie in zahlreichen weiteren Tarifwerken vorgesehen, dort zusätzlich zu den 15 vom Hundert gemäß § 1a Abs. 1a BetrAVG. Es handelt sich um eine arbeitgeberfinanzierte Zuwendung im Sinne des § 3 Nr. 63 EStG, welche den 8-%-Höchstbetrag sowie die 4-%-Beitragsfreiheit (§ 1 Abs. 1 S. 1 Nr. 9 SvEV) VORRANGIG belegt: die eigene Entgeltumwandlung wird insoweit verdrängt und verteuert sich entsprechend. Es handelt sich ökonomisch um einen Sockelbetrag, nicht um einen Hebel: die Grenzrendite des jeweils nächsten Beitragseuros wird hierdurch nicht verändert (∂²Ertrag/∂agz_fix ∂beitrag ≤ 0; eine Absenkung ist über den Verdrängungseffekt möglich), der Durchschnittswert wird hingegen erheblich angehoben. In der Sensitivitätskurve stellt sich dies näherungsweise als affiner Verlauf dar — bis zur Erschöpfung des 4-%- bzw. 8-%-Höchstbetrags, danach ist ein Knick zu verzeichnen.',
+ 'f.I:agz_fix_dyn.label': 'Dynamisierung des festen Zuschusses',
+ 'f.I:agz_fix_dyn.hint': 'Festbeträge sind üblicherweise nominal im Tarifvertrag ausgewiesen und werden lediglich im Rahmen von Tarifverhandlungen angepasst — die Voreinstellung lautet daher „nominal unverändert". Über einen Zeitraum von 27 Jahren verbleibt bei einer Inflationsrate von 2 vom Hundert hiervon der Faktor 1,02⁻²⁷ ≈ 0,59; sofern dies als zu ungünstig erachtet wird, ist auf „mit dem Gehalt" umzustellen, woraus sich ein realer Zuschuss mit der Wachstumsrate gsteig − infl ergibt.',
+ 'f.I:agz_fix_dyn.o0': 'nominal unverändert',
+ 'f.I:agz_fix_dyn.o1': 'mit dem Gehalt',
+ 'f.I:agzus_sv.label': 'Berechnungsmodus des Zuschusses',
+ 'f.I:agzus_sv.hint': '„Spitz" entspricht dem Gesetzeswortlaut: Gemäß § 1a Abs. 1a BetrAVG wird der Zuschuss ausschließlich in dem Umfang geschuldet, in welchem der Arbeitgeber tatsächlich Sozialversicherungsbeiträge einspart. Liegt das Entgelt oberhalb beider Beitragsbemessungsgrenzen, wird nichts eingespart und mithin nichts geschuldet. Der Regler erreicht daher im Regelfall bei rund 21 vom Hundert seine Sättigung. „Voller Beitrag" beruht auf einer freiwilligen oder tarifvertraglichen Zusage, „sv-freier Anteil" entspricht der verbreiteten pauschalen Praxis. Vertrauensgrad der spitzen Berechnungsweise ca. 75 vom Hundert.',
+ 'f.I:agzus_sv.o0': 'voller Beitrag',
+ 'f.I:agzus_sv.o1': 'sv-freier Anteil',
+ 'f.I:agzus_sv.o2': 'spitz berechnet',
+ 'f.I:dyn.label': 'Dynamisierung des Beitrags',
+ 'f.I:dyn.hint': 'Erfolgt eine Anpassung des Beitrags entsprechend der Gehaltssteigerung, verbleibt die Ausschöpfung des 8-%-Höchstbetrags über die Jahre annähernd konstant. Bei nominal unverändertem Beitrag mindert sich dessen realer Wert entsprechend der Inflationsrate — gleichermaßen mindert sich der Nettoaufwand, welcher den beiden übrigen Gestaltungsvarianten zum Vergleich zugrunde gelegt wird.',
+ 'f.I:dyn.o1': 'mit dem Gehalt',
+ 'f.I:dyn.o0': 'nominal unverändert',
+ 'f.I:rendite.label': 'Bruttorendite ETF, jährlich',
+ 'f.I:rendite.hint': 'Vor Berücksichtigung von Kosten und Steuern. In sämtlichen drei Gestaltungsvarianten wird derselbe ETF zugrunde gelegt — hierdurch wird sichergestellt, dass ein Vergleich der Förderarchitekturen und nicht der Anlageentscheidungen erfolgt.',
+ 'f.I:alter.label': 'Lebensalter, gegenwärtig',
+ 'f.I:alter.hint': 'Ausgangspunkt der Ansparphase. Kalenderjahr 0 entspricht dem Jahr 2026.',
+ 'f.I:alter.unit': 'Jahre',
+ 'f.I:rentbeg.label': 'Beginn der Auszahlungsphase',
+ 'f.I:rentbeg.hint': 'Beginn der Auszahlungsphase sämtlicher drei Gestaltungsvarianten. Eine Auszahlung aus dem Altersvorsorgedepot ist frühestens ab Vollendung des 65. Lebensjahres zulässig (Reform 2026).',
+ 'f.I:rentbeg.unit': 'Jahre',
+ 'f.I:kv_ruhe.label': 'Krankenversicherung im Ruhestand',
+ 'f.I:kv_ruhe.hint': 'Die maßgebliche Einflussgröße. Im Rahmen der gesetzlichen Krankenversicherung gelten Betriebsrenten als Versorgungsbezüge und unterliegen dem vollen Beitragssatz (§§ 229, 250 SGB V); für die private Altersvorsorge gilt dies nicht. Diese Einstellung allein bewirkt eine Umkehr des Ergebnisses.',
+ 'f.I:kv_ruhe.o1': 'gesetzlich versichert',
+ 'f.I:kv_ruhe.o2': 'privat versichert',
+ 'f.I:auszform.label': 'Auszahlungsform bAV',
+ 'f.I:auszform.hint': 'Kapitalauszahlung: im Zuflussjahr in voller Höhe steuerpflichtig, Beiträge zur Krankenversicherung werden auf 120 Monate verteilt erhoben (§ 229 Abs. 1 S. 3 SGB V). Bei der Rentenzahlung wird der Bezug auf die verbleibende Lebenszeit gestreckt und ein Vielfaches des Kapitals unter demselben Freibetrag abgeschirmt. Im Modell ist ausschließlich die vollständige oder keine Kapitalisierung vorgesehen; eine Teilkapitalisierung der bAV wird nicht abgebildet.',
+ 'f.I:auszform.o1': 'Kapitalauszahlung',
+ 'f.I:auszform.o2': 'lebenslange Rentenzahlung',
+ 'f.I:teilkap.label': 'Altersvorsorgedepot: Einmalbetrag zu Beginn',
+ 'f.I:teilkap.hint': 'Bis zu 30 vom Hundert des angesparten Kapitals können zu Beginn der Auszahlungsphase als Einmalbetrag entnommen werden — in beiden Auszahlungsformen. Dies ist aus zweierlei Gründen mit Kosten verbunden: voller Progressionssatz im Zuflussjahr sowie im Anschluss lediglich Verzinsung nach dem Satz der Abgeltungsteuer. Der über den Jahreshöchstbetrag hinausgehende Betrag (nachfolgend „Sleeve" genannt) wird ohne Einmalbetrag verrentet; hierbei handelt es sich um eine Modellkonvention, nicht um eine Rechtsvorschrift.',
+ 'f.I:av_auszform.label': 'Altersvorsorgedepot: verbleibender Betrag',
+ 'f.I:av_auszform.hint': 'Regelung des Umgangs mit dem über den Einmalbetrag hinausgehenden Kapital — unabhängig von der vorstehend getroffenen Entscheidung zur bAV. Auszahlungsplan: das Kapital verbleibt angelegt und wird verzinst entnommen; die nicht geförderte Schicht wird mit dem hälftigen Unterschiedsbetrag der Besteuerung unterworfen. Lebenslange Rentenzahlung: das Kapital geht an den Anbieter über, im Gegenzug wird die nicht geförderte Schicht lediglich mit dem Ertragsanteil besteuert (§ 22 Nr. 5 S. 2 Buchst. a EStG, 17 vom Hundert ab Vollendung des 67. Lebensjahres, im vorliegenden Fall rund 26 vom Hundert). Die geförderte Schicht unterliegt in beiden Fällen der vollen nachgelagerten Besteuerung; hieran ändert sich nichts.',
+ 'f.I:av_auszform.o1': 'Auszahlungsplan',
+ 'f.I:av_auszform.o2': 'lebenslange Rentenzahlung',
+ 'f.I:agz_fix_min.label': 'Mindest-Eigenbeitrag für den festen Zuschuss',
+ 'f.I:agz_fix_min.hint': 'Bei sogenannten Matching-Modellen wird der Festbetrag an eine Mindest-Eigenleistung geknüpft („wer mindestens den Betrag X umwandelt, erhält den Betrag Y"). Der Wert 0 ist als bedingungslos zu verstehen — in diesem Fall wird der Zuschuss in jedem aktiven Jahr geleistet, auch bei einem Beitrag von null. Es wird auf Folgendes hingewiesen: Ein tatsächlich bedingungsloser Zuschuss stellte keinen Differenzeffekt der Umwandlungsentscheidung dar und würde sich zugunsten der bAV auswirken, obwohl er auch ohne Umwandlung geleistet würde. Es ist ausschließlich der Betrag einzutragen, welcher tatsächlich an die Teilnahme gebunden ist.',
+ 'f.I:rentfak_av.label': 'Rentenfaktor Altersvorsorgedepot',
+ 'f.I:rentfak_av.hint': 'Ausschließlich bei Verrentung des Depots von Bedeutung. Voreingestellt entsprechend der bAV; ein Depotvertrag kommt ohne Versicherungsmantel aus und kann daher günstiger ausfallen — der aus dem konkreten Angebot ersichtliche Wert ist einzutragen. Bei einem Wert von 0 erfolgt keine Rentenzahlung.',
+ 'f.I:rentfak_av.unit': '€ je 10.000 €',
+ 'f.I:rentdyn_av.label': 'Dynamik der Depotrente, jährlich',
+ 'f.I:rentdyn_av.hint': 'Überschussbeteiligung beziehungsweise Fondsentwicklung während der Rentenphase des Depotvertrags.',
+ 'f.I:rentfak.label': 'Rentenfaktor bAV',
+ 'f.I:rentfak.hint': 'Ausschließlich bei der Auszahlungsform „Rente" von Bedeutung. Eine Monatsrente von 26 € je 10.000 € entspricht einer Entnahmequote von etwa 3,1 vom Hundert. Der Wert ist dem Produktinformationsblatt zu entnehmen.',
+ 'f.I:rentfak.unit': '€ je 10.000 €',
+ 'f.I:rentdyn.label': 'Dynamik der bAV-Rente, jährlich',
+ 'f.I:rentdyn.hint': 'Überschussbeteiligung beziehungsweise Fondsentwicklung während der Rentenphase.',
+ 'f.I:fuenftel.label': 'Prüfung der Fünftelregelung',
+ 'f.I:fuenftel.hint': 'Die Anwendung des § 34 EStG ist bei planmäßiger Kapitalabfindung aus Verträgen im Sinne des § 3 Nr. 63 EStG gemäß BFH-Urteil X R 23/15 lediglich ausnahmsweise gegeben. Es wird von einer konservativen Betrachtung ausgegangen: nicht anwendbar.',
+ 'f.I:fuenftel.o0': 'nein (konservative Annahme)',
+ 'f.I:fuenftel.o1': 'ja',
+ 'f.I:planende.label': 'Vergleichshorizont bis zum Lebensalter',
+ 'f.I:planende.hint': 'Auszahlungspläne laufen bis zu dem hier genannten Zeitpunkt. Lebenslange Rentenzahlungen werden über denselben Zeithorizont verglichen; darüber hinausgehende Zahlungen werden als Hinweis unter „Diagnose" ausgewiesen. Wer ein höheres Lebensalter erreicht, ist insoweit im Vorteil.',
+ 'f.I:planende.unit': 'Jahre',
+ 'f.I:ausscheid.label': 'Ausscheiden aus dem Beschäftigungsverhältnis',
+ 'f.I:ausscheid.hint': 'Ab dem genannten Zeitpunkt entfallen Gehalt und Beiträge. Das Kapital wird bis zum Beginn der Auszahlungsphase weiter verzinst.',
+ 'f.I:ausscheid.unit': 'Jahre',
+ 'f.I:tzalter.label': 'Teilzeitbeschäftigung ab Lebensalter',
+ 'f.I:tzalter.hint': 'Jeder Wert ab dem Beginn der Auszahlungsphase bedeutet: keine Teilzeitbeschäftigung. Voreingestellt ist der Wert 67.',
+ 'f.I:tzalter.unit': 'Jahre',
+ 'f.I:tzfaktor.label': 'Teilzeitfaktor',
+ 'f.I:tzfaktor.hint': 'Anteil am Vollzeitgehalt. Ein Wert von 60 vom Hundert entspricht einer 60-%-Stelle.',
+ 'f.I:gsteig.label': 'Gehalts- und Lohnsteigerung, jährlich',
+ 'f.I:gsteig.hint': 'Bewirkt zugleich die Fortschreibung von Beitragsbemessungsgrenzen, Bezugsgröße, Durchschnittsentgelt und aktuellem Rentenwert.',
+ 'f.I:stkl.label': 'Veranlagungsart',
+ 'f.I:stkl.hint': 'Maßgeblich ist die VERANLAGUNGSART, nicht die Lohnsteuerklasse: Die Lohnsteuerklasse steuert lediglich den unterjährigen Abzug, im Rahmen des Einkommensteuerbescheids erfolgt die Berechnung ohnehin unter Anwendung des Splittingverfahrens gemäß § 32a Abs. 5 EStG. Bei Wahl von „Zusammenveranlagung" ist zwingend das zu versteuernde Einkommen des Ehe- bzw. Lebenspartners einzutragen.',
+ 'f.I:stkl.o1': 'Einzelveranlagung',
+ 'f.I:stkl.o3': 'Zusammenveranlagung (Splitting)',
+ 'f.I:partner.label': 'Zu versteuerndes Einkommen des Ehe- bzw. Lebenspartners',
+ 'f.I:partner.hint': 'Ausschließlich bei Zusammenveranlagung von Bedeutung. Die Berechnung erfolgt nach der Formel 2·ESt((zvE + zvE_Partner)/2).',
+ 'f.I:kist.label': 'Kirchensteuersatz',
+ 'f.I:kist.hint': '8 vom Hundert in den Bundesländern Bayern und Baden-Württemberg, im Übrigen 9 vom Hundert, bei Austritt aus der Religionsgemeinschaft 0. Wirkt sich zudem auf die Abgeltungsteuer aus: 0,25/(1+0,25k)·(1+0,055+k).',
+ 'f.I:tarifanp.label': 'Anpassung der Tarifeckwerte, jährlich',
+ 'f.I:tarifanp.hint': 'Der gesamte Einkommensteuertarif wird um den Faktor λ = (1+x)^t gestreckt: ESt = s·λ·T(zvE/s/λ). Dies entspricht in der Wirkung exakt einer proportionalen Verschiebung sämtlicher Eckwerte. Ein Wert von 0 vom Hundert zeigt die volle kalte Progression an.',
+ 'f.I:kinder.label': 'Anzahl der Kinder',
+ 'f.I:kinder.hint': 'Kinderzulage im Altersvorsorgedepot: 1 € je eingezahltem €, bis zu einem Höchstbetrag von 300 € je Kind.',
+ 'f.I:kind_jahre.label': 'Anzahl der Jahre mit Kinderzulage',
+ 'f.I:kind_jahre.hint': 'Die Kinderzulage ist an den Anspruch auf Kindergeld gebunden (§ 85 EStG) und erstreckt sich mithin nicht auf die gesamte Ansparphase.',
+ 'f.I:kind_jahre.unit': 'Jahre',
+ 'f.I:kinderlos.label': 'Kinderlosigkeit (Zuschlag zur Pflegeversicherung)',
+ 'f.I:kinderlos.hint': 'Zuschlag von 0,6 Prozentpunkten zur Pflegeversicherung, welcher ausschließlich vom Arbeitnehmer zu tragen ist (§ 55 Abs. 3 SGB XI).',
+ 'f.I:kinderlos.o0': 'nein',
+ 'f.I:kinderlos.o1': 'ja',
+ 'f.I:k_bav.label': 'Kosten des bAV-Produkts, jährlich',
+ 'f.I:k_bav.hint': 'Versicherungsmantel zuzüglich Gesamtkostenquote (TER). Die Effektivkosten sind dem Produktinformationsblatt zu entnehmen — eine Schätzung ist zu vermeiden.',
+ 'f.I:k_av.label': 'Kosten des Altersvorsorgedepots, jährlich',
+ 'f.I:k_av.hint': 'Beim Standarddepot sind die Effektivkosten gesetzlich auf 1,0 vom Hundert jährlich begrenzt.',
+ 'f.I:k_priv.label': 'Kosten des privaten ETF-Depots, jährlich',
+ 'f.I:k_priv.hint': 'Reine Gesamtkostenquote (TER) eines breit gestreuten Welt-ETF.',
+ 'f.I:infl.label': 'Inflationsrate, jährlich',
+ 'f.I:infl.hint': 'Abzinsungssatz für sämtliche Angaben „in heutiger Kaufkraft". Die Rangfolge wird hierdurch kaum verändert, wohl aber sämtliche Beträge in ihrer Höhe.',
+ 'f.I:sonst_zve.label': 'Sonstiges zu versteuerndes Einkommen im Ruhestand',
+ 'f.I:sonst_zve.hint': 'Insbesondere der steuerpflichtige Teil der gesetzlichen Rente, ohne die hier verglichenen Produkte. Maßgeblich für die Feststellung des Grenzsteuersatzes in der Auszahlungsphase — und damit für die Tarifarbitrage t₀ − t₁.',
+ 'f.I:rente_br.label': 'Gesetzliche Bruttorente, jährlich',
+ 'f.I:rente_br.hint': 'Ausschließlich für die Feststellung der Beitragsbemessungsgrenze in der Krankenversicherung von Bedeutung: gesetzliche Rente und Versorgungsbezüge unterliegen gemeinsam EINER Beitragsbemessungsgrenze (§ 223 Abs. 3 SGB V).',
+ 'f.P:bbg_rv.label': 'Beitragsbemessungsgrenze Rentenversicherung (jährlich)',
+ 'f.P:bbg_rv.hint': 'SVBezGrV 2026 (BGBl. 2025 I Nr. 116), bundeseinheitlich geltend.',
+ 'f.P:bbg_kv.label': 'Beitragsbemessungsgrenze Kranken-/Pflegeversicherung',
+ 'f.P:bbg_kv.hint': 'SVBezGrV 2026; 5.812,50 € monatlich.',
+ 'f.P:bezug.label': 'Bezugsgröße (monatlich)',
+ 'f.P:bezug.hint': 'SVBezGrV 2026, 47.460 € jährlich. Ein Zwanzigstel dieses Betrags entspricht dem Freibetrag für Versorgungsbezüge in der Krankenversicherung (§ 226 Abs. 2 S. 2 SGB V).',
+ 'f.P:de_rv.label': 'Durchschnittsentgelt in der Rentenversicherung',
+ 'f.P:de_rv.hint': 'Anlage 1 zu SGB VI, Wert 2026 — Nenner für die Berechnung der Entgeltpunkte.',
+ 'f.P:rw.label': 'Aktueller Rentenwert',
+ 'f.P:rw.hint': 'Rentenwertbestimmungsverordnung 2026, geltend ab dem 1.7.2026: 42,52 € (+4,24 vom Hundert).',
+ 'f.P:rw.unit': '€',
+ 'f.P:rv_an.label': 'Beitrag zur Rentenversicherung, Arbeitnehmeranteil',
+ 'f.P:rv_an.hint': '18,6 vom Hundert, je zur Hälfte.',
+ 'f.P:av_an.label': 'Beitrag zur Arbeitslosenversicherung, Arbeitnehmeranteil',
+ 'f.P:av_an.hint': '2,6 vom Hundert, je zur Hälfte.',
+ 'f.P:kv_allg.label': 'Allgemeiner Beitragssatz zur Krankenversicherung',
+ 'f.P:kv_allg.hint': '§ 241 SGB V.',
+ 'f.P:kv_zus.label': 'Durchschnittlicher Zusatzbeitrag zur Krankenversicherung',
+ 'f.P:kv_zus.hint': 'Bekanntmachung des Bundesministeriums für Gesundheit; kassenindividuell abweichend — es ist der Satz der jeweils zuständigen Krankenkasse einzutragen.',
+ 'f.P:pv_ges.label': 'Gesamtbeitragssatz Pflegeversicherung',
+ 'f.P:pv_ges.hint': '§ 55 SGB XI. Abschläge ab dem zweiten Kind sind nicht Gegenstand der Modellierung.',
+ 'f.P:pv_an.label': 'Beitrag zur Pflegeversicherung, Arbeitnehmeranteil',
+ 'f.P:pv_an.hint': 'Im Freistaat Sachsen abweichend geregelt (2,3 vom Hundert).',
+ 'f.P:pv_kl.label': 'Zuschlag zur Pflegeversicherung für Kinderlose',
+ 'f.P:pv_kl.hint': '§ 55 Abs. 3 SGB XI, ausschließlich vom Arbeitnehmer zu tragen.',
+ 'f.P:gfb.label': 'Grundfreibetrag (Ende der Zone 1)',
+ 'f.P:gfb.hint': '§ 32a Abs. 1 EStG in der Fassung des Steuerfortentwicklungsgesetzes.',
+ 'f.P:e2.label': 'Ende der Zone 2',
+ 'f.P:e2.hint': 'Der Grenzsteuersatz steigt von 14 auf 23,97 vom Hundert.',
+ 'f.P:e3.label': 'Ende der Zone 3',
+ 'f.P:e3.hint': 'Der Grenzsteuersatz steigt von 23,97 auf 42 vom Hundert.',
+ 'f.P:e4.label': 'Beginn der Zone 5 (sogenannte Reichensteuer)',
+ 'f.P:e4.hint': 'Ab einem Betrag von 277.826 € gilt ein Satz von 45 vom Hundert.',
+ 'f.P:a2.label': 'Koeffizient a₂',
+ 'f.P:a2.hint': 'ESt = (a₂·y + b₂)·y, wobei y = (zvE − Grundfreibetrag)/10.000.',
+ 'f.P:b2.label': 'Koeffizient b₂',
+ 'f.P:a3.label': 'Koeffizient a₃',
+ 'f.P:a3.hint': 'ESt = (a₃·z + b₃)·z + c₃, wobei z = (zvE − 17.799)/10.000.',
+ 'f.P:b3.label': 'Koeffizient b₃',
+ 'f.P:c3.label': 'Konstante c₃',
+ 'f.P:c4.label': 'Konstante c₄',
+ 'f.P:c4.hint': 'ESt = 0,42·zvE − c₄.',
+ 'f.P:c5.label': 'Konstante c₅',
+ 'f.P:c5.hint': 'ESt = 0,45·zvE − c₅.',
+ 'f.P:soli.label': 'Solidaritätszuschlag',
+ 'f.P:soli.hint': 'SolzG 1995.',
+ 'f.P:soli_fg.label': 'Freigrenze des Solidaritätszuschlags',
+ 'f.P:soli_fg.hint': '2026, Grundtarif, bezogen auf die festgesetzte Einkommensteuer; im Rahmen der Zusammenveranlagung verdoppelt. Ergänzend besteht eine Milderungszone.',
+ 'f.P:soli_mz.label': 'Milderungszone, Grenzbelastung',
+ 'f.P:soli_mz.hint': '§ 3 Abs. 2a SolzG.',
+ 'f.P:an_pausch.label': 'Arbeitnehmer-Pauschbetrag',
+ 'f.P:an_pausch.hint': '§ 9a S. 1 Nr. 1a EStG.',
+ 'f.P:sa_pausch.label': 'Sonderausgaben-Pauschbetrag',
+ 'f.P:sa_pausch.hint': '§ 10c EStG.',
+ 'f.P:kapst.label': 'Abgeltungsteuersatz',
+ 'f.P:kapst.hint': '§ 32d Abs. 1 EStG.',
+ 'f.P:tfs.label': 'Teilfreistellung für Aktienfonds',
+ 'f.P:tfs.hint': '§ 20 Abs. 1 Nr. 3 in Verbindung mit § 20 InvStG, bei einem Aktienfondsanteil von über 50 vom Hundert.',
+ 'f.P:sparerpb.label': 'Sparer-Pauschbetrag',
+ 'f.P:sparerpb.hint': '§ 20 Abs. 9 EStG; im Rahmen der Zusammenveranlagung verdoppelt. Absorbiert einen erheblichen Teil der Vorabpauschale — siehe hierzu die Wasserfalldarstellung.',
+ 'f.P:basiszins.label': 'Basiszins für die Vorabpauschale',
+ 'f.P:basiszins.hint': 'Schreiben des Bundesministeriums der Finanzen vom 13.01.2026, § 18 Abs. 4 InvStG (2025: 2,53 vom Hundert). Eine Festsetzung auf 0 bedeutet: keine Vorabpauschale.',
+ 'f.P:vp_faktor.label': 'Faktor für den Basisertrag',
+ 'f.P:vp_faktor.hint': '§ 18 Abs. 1 S. 1 InvStG.',
+ 'f.P:st_frei_q.label': 'Steuerfrei gemäß § 3 Nr. 63 EStG (Anteil BBG-RV)',
+ 'f.P:st_frei_q.hint': '8 vom Hundert der Beitragsbemessungsgrenze Rentenversicherung entsprechen 8.112 € im Jahr 2026.',
+ 'f.P:sv_frei_q.label': 'Sozialversicherungsfrei (Anteil BBG-RV)',
+ 'f.P:sv_frei_q.hint': '§ 1 Abs. 1 S. 1 Nr. 9 SvEV; 4 vom Hundert entsprechen 4.056 € im Jahr 2026. Zugleich Grenze des Rechtsanspruchs gemäß § 1a BetrAVG.',
+ 'f.P:zul_g1.label': 'Zulage, Stufe 1 (je € Eigenbeitrag)',
+ 'f.P:zul_g1.hint': 'Altersvorsorgereformgesetz, in Kraft getreten im Mai 2026, Anwendung ab dem 1.1.2027.',
+ 'f.P:zul_s1.label': 'Grenzbetrag der Stufe 1',
+ 'f.P:zul_s1.hint': 'Bis zu einem Eigenbeitrag von 360 €: 50 Cent je €.',
+ 'f.P:zul_g2.label': 'Zulage, Stufe 2 (je € Eigenbeitrag)',
+ 'f.P:zul_g2.hint': 'Von 361 bis 1.800 €: 25 Cent je €.',
+ 'f.P:zul_s2.label': 'Grenzbetrag der Stufe 2',
+ 'f.P:zul_s2.hint': 'Höchstbetrag des geförderten Eigenbeitrags; hieraus ergibt sich eine maximale Grundzulage von 540 €.',
+ 'f.P:kind_zul.label': 'Kinderzulage je Kind',
+ 'f.P:kind_zul.hint': '1 € je eingezahltem €, bis zu einem Höchstbetrag von 300 € je Kind.',
+ 'f.P:av_max.label': 'Höchstbetrag der Einzahlung, jährlich',
+ 'f.P:av_max.hint': 'FAQ des Bundesministeriums der Finanzen zur Reform der geförderten privaten Altersvorsorge, Stand 05.05.2026. Der über den genannten Betrag hinausgehende Anteil wird einer Nebenschiene zugeführt, welche der Besteuerung eines privaten Depots unterliegt.',
+ 'f.P:av_sa_max.label': 'Höchstbetrag des Sonderausgabenabzugs gemäß § 10a EStG',
+ 'f.P:av_sa_max.hint': 'MODELLANNAHME, Vertrauensgrad ca. 70 vom Hundert. Eigenbeitrag bis zu 1.800 € zuzüglich Zulagen. Von diesem Wert hängt maßgeblich ab, ob ein Kind den Wert des Altersvorsorgedepots erhöht oder mindert.',
+ 'f.P:ertragsq.label': 'Ertragsanteil (Lebensalter 67)',
+ 'f.P:ertragsq.hint': '§ 22 Nr. 1 S. 3 Buchst. a Doppelbuchst. bb EStG, für nicht geförderte Rentenanteile.',
+ 'f.P:halb.label': 'Steuerpflichtiger Anteil des Unterschiedsbetrags',
+ 'f.P:halb.hint': '§ 20 Abs. 1 Nr. 6 S. 2 EStG entsprechend anzuwenden (Vertragslaufzeit über 12 Jahre, Auszahlung nach Vollendung des 62. Lebensjahres): hälftiger Unterschiedsbetrag. Vertrauensgrad ca. 80 vom Hundert.',
+
+ /* ---------------- Rahmen, Fenstertitel, Kopf- und Fußbereich ---------------- */
+ 'app.title': 'Vergleichsrechnung Altersvorsorge',
+ 'app.meta': 'Vergleichende Gegenüberstellung der Vorsorgeformen betriebliche Altersvorsorge, Altersvorsorgedepot und privates ETF-Depot unter Zugrundelegung eines übereinstimmenden monatlichen Nettoaufwands im Sinne der nachstehenden Begriffsbestimmungen. Maßgeblicher Rechtsstand: 2026, vorbehaltlich zwischenzeitlich eingetretener, hier noch nicht berücksichtigter Rechtsänderungen.',
+ 'hdr.title': 'Vergleichsrechnung Altersvorsorge',
+ 'hdr.sub': 'Gegenüberstellung der betrieblichen Altersvorsorge, des Altersvorsorgedepots sowie des privaten ETF‑Depots &mdash; jeweils unter Zugrundelegung eines <b>übereinstimmenden monatlichen Nettoaufwands</b> sowie desselben Zielinvestments, sodass Abweichungen im Ergebnis ausschließlich auf die unterschiedliche steuerliche und beitragsrechtliche Behandlung zurückzuführen sind. Maßgeblicher Rechtsstand: 2026.',
+ 'win.header': 'Vergleichsrechnung Altersvorsorge',
+ 'win.result': 'Darstellung des Berechnungsergebnisses',
+ 'win.input': 'Von der Nutzerin bzw. dem Nutzer beizubringende Angaben',
+ 'win.chart': 'Grafische Aufbereitung der Berechnungsergebnisse',
+ 'win.extra': 'Ergänzende, nicht zwingend beizubringende Angaben',
+ 'win.calc': 'Darstellung des Rechenwegs nebst Rechtsgrundlagen',
+ 'win.share': 'Speicherung, Ausfuhr und Weitergabe der Eingabedaten',
+ 'win.min': 'Fenster verkleinern',
+ 'win.restore': 'Ursprüngliche Ansicht wiederherstellen',
+ 'win.n': function(p){ return 'Fenster ' + p.n; },
+ 'input.sub': 'Es wird darauf hingewiesen, dass die Berechnung nach Maßgabe der jeweils zuletzt vorgenommenen Eingabe unverzüglich, mithin ohne gesonderte Auslösung durch die Nutzerin bzw. den Nutzer, erneut durchgeführt wird. Zu jedem Eingabefeld wird über die Schaltfläche <span class="qm" style="cursor:default">?</span> eine Erläuterung bereitgehalten; auf deren Kenntnisnahme wird ausdrücklich hingewiesen.',
+ 'extra.sub': 'Für sämtliche nachfolgend aufgeführten Angaben sind sachgerechte, am Regelfall ausgerichtete Voreinstellungen hinterlegt worden. Von einer Änderung ist abzusehen, es sei denn, die individuellen Verhältnisse weichen von den vorgenannten Annahmen ab; in diesem Fall ist eine Anpassung vorzunehmen, wobei die Verantwortung für die Sachgerechtigkeit der geänderten Werte bei der Nutzerin bzw. dem Nutzer verbleibt.',
+ 'calc.sub': 'Die nachstehenden Ausführungen richten sich an diejenigen Nutzerinnen und Nutzer, welche die Herleitung der ausgewiesenen Beträge im Einzelnen nachzuvollziehen beabsichtigen; eine Kenntnisnahme ist zur Nutzung der Anwendung nicht erforderlich.',
+ 'share.sub': 'Es wird klarstellend darauf hingewiesen, dass die eingegebenen Daten ausschließlich in dem zur Nutzung eingesetzten Browser (<kbd>localStorage</kbd>) vorgehalten werden. Eine Übermittlung an einen Server, eine Verarbeitung durch Dritte sowie eine Erhebung von Nutzungsdaten zu Auswertungszwecken finden nicht statt und sind auch nicht vorgesehen.',
+ 'ui.share': 'Einheitlichen Ressourcenzeiger einschließlich der eingegebenen Werte in die Zwischenablage übernehmen',
+ 'ui.export': 'Eingegebene Werte in einer Datei niederlegen',
+ 'ui.import': 'Zuvor niedergelegte Werte aus einer Datei einlesen',
+ 'ui.reset': 'Sämtliche Angaben auf den Ausgangszustand zurückversetzen',
+ 'ui.pin.set': 'Gegenwärtigen Berechnungsstand als Referenzwert hinterlegen',
+ 'ui.pin.clear': 'Hinterlegten Referenzwert wieder aufheben',
+ 'ui.lang': 'Sprache',
+ 'ui.lang.aria': 'Sprachauswahl',
+ 'ui.lang.partial': 'lediglich teilweise übersetzt',
+ 'ui.lang.partialNote': 'Diese Sprachfassung ist <b>teilweise übersetzt</b>: Oberfläche, Feldbezeichnungen, Tabellenüberschriften sowie Diagrammlegenden liegen in übersetzter Form vor. Die ausführlichen rechtlichen Erläuterungen — die Texte hinter dem Zeichen <span class="qm" style="cursor:default">?</span> an den Eingabefeldern, das abschließende Ergebnis sowie die Darstellung des Rechenwegs — erscheinen in deutscher Sprache. Die Rechtsgrundlagen (BetrAVG, EStG, SGB V) liegen unabhängig von der gewählten Sprachfassung ausschließlich in deutscher Sprache vor.',
+ 'sb.up': 'Zurück zum Ergebnis (Seitenanfang)',
+ 'footer.1': '<b>Es wird ausdrücklich darauf hingewiesen, dass mit der vorliegenden Anwendung weder eine steuerliche noch eine anlagebezogene Beratung im Sinne der einschlägigen berufsrechtlichen Vorschriften erbracht wird.</b> Ein Berechnungsmodell vermag eine auf den Einzelfall bezogene Beratung nicht zu ersetzen; ein Rechtsanspruch auf Richtigkeit der ausgewiesenen Beträge wird nicht begründet. Es wird ferner darauf hingewiesen, dass die Rechtslage 2026 betreffend die reformierte private Altersvorsorge in mehreren Punkten noch nicht abschließend geklärt ist. Diejenigen Annahmen, denen der geringste Vertrauensgrad beizumessen ist, sind unter „Rechenweg → Belastbarkeit der Annahmen" gesondert ausgewiesen und können dort im Einzelnen angepasst werden.',
+ 'footer.2': 'Der Rechenkern ist unverändert und ohne inhaltliche Abweichung aus dem Berechnungsmodell <span class="pill">bAV-DYNO_vs_Altersvorsorgedepot_vs_ETF.xlsx</span> übernommen worden. Eine Überprüfung anhand dreier Testfälle hat ergeben, dass Übereinstimmung bis zur Maschinengenauigkeit besteht; die größte festgestellte relative Abweichung beträgt 1,3·10<sup>&minus;14</sup> und ist mithin als vernachlässigbar einzustufen.',
+
+ /* ---------------- Die drei Gestaltungsvarianten ---------------- */
+ 'opt.bav.name': 'bAV (Entgeltumwandlung)',
+ 'opt.bav.short': 'bAV',
+ 'opt.bav.nom': 'die betriebliche Altersvorsorge',
+ 'opt.bav.satz': 'Die betriebliche Altersvorsorge',
+ 'opt.bav.gen': 'der betrieblichen Altersvorsorge',
+ 'opt.av.name': 'Altersvorsorgedepot',
+ 'opt.av.short': 'AV-Depot',
+ 'opt.av.nom': 'das Altersvorsorgedepot',
+ 'opt.av.satz': 'Das Altersvorsorgedepot',
+ 'opt.av.gen': 'des Altersvorsorgedepots',
+ 'opt.priv.name': 'privates ETF-Depot',
+ 'opt.priv.short': 'privat',
+ 'opt.priv.nom': 'das private ETF-Depot',
+ 'opt.priv.satz': 'Das private ETF-Depot',
+ 'opt.priv.gen': 'des privaten ETF-Depots',
+
+ /* ---------------- Kennzahlen ---------------- */
+ 'metric.monat.label': 'Monatliche Leistung',
+ 'metric.monat.unit': '€/Monat',
+ 'metric.monat.desc': 'Gleichbleibende monatliche Zahlung über die gesamte Auszahlungsphase mit demselben Wert, in heutiger Kaufkraft. Der Wert, welcher unmittelbar mit dem gegenwärtigen Nettoeinkommen verglichen werden kann.',
+ 'metric.ertrag.label': 'Netto-Ertrag (Barwert)',
+ 'metric.ertrag.unit': '€',
+ 'metric.ertrag.desc': 'Der Betrag, welcher über den eigenen Einsatz hinaus in heutiger Kaufkraft erwirtschaftet wird: Barwert sämtlicher Netto-Leistungen abzüglich Barwert des Nettoaufwands.',
+ 'metric.irr.label': 'Interner Zinsfuß',
+ 'metric.irr.unit': '% p.a.',
+ 'metric.irr.desc': 'Rendite bezogen auf den tatsächlich eingesetzten Nettobetrag, nominal. Unmittelbar mit der eingestellten Bruttorendite des ETF vergleichbar — die Differenz entspricht genau dem, was Förderung und Abgaben zusammengenommen kosten oder erbringen.',
+ 'metric.kapital.label': 'Kapital zu Beginn der Rentenzahlung',
+ 'metric.kapital.unit': '€',
+ 'metric.kapital.desc': 'Vor Berücksichtigung von Steuern und Sozialabgaben, nominal. Ausdrücklich NICHT die maßgebliche Entscheidungsgröße: die bAV weist hier häufig einen Vorsprung auf, welcher sich im Rahmen der Auszahlung jedoch nicht bestätigt.',
+ 'metric.pa': ' jährlich',
+ 'metric.pp': ' Prozentpunkte',
+ 'metric.short.monat': 'Monat',
+ 'metric.short.ertrag': 'Ertrag',
+ 'metric.short.irr': 'IRR',
+ 'metric.short.kapital': 'Kapital',
+
+ /* ---------------- Eingabefelder, Rahmenwerk ---------------- */
+ 'unit.pct': '%',
+ 'unit.eur': '€',
+ 'unit.eurm': '€/Monat',
+ 'ui.hintFor': function(p){ return 'Erläuterung zu: ' + p.label; },
+ 'ui.couple': '<span>⇅</span> Es handelt sich um zwei Darstellungsweisen ein und derselben Rechengröße. Wird eine der beiden Angaben geändert, so wird die jeweils andere von Amts wegen entsprechend nachgeführt; einer gesonderten Anpassung durch die Nutzerin bzw. den Nutzer bedarf es insoweit nicht.',
+ 'ui.cnt.legal': function(p){ return p.n + ' gesetzlich vorgegebene Rechengrößen'; },
+ 'ui.cnt.fields': function(p){ return p.n + ' Eingabefelder'; },
+ 'ui.legalNote': 'Bei den nachfolgend aufgeführten Größen handelt es sich um gesetzlich vorgegebene Rechengrößen; die jeweils einschlägige Rechtsgrundlage ist ausgewiesen. Von einer Änderung ist grundsätzlich abzusehen; sie kommt ausschließlich in Betracht, sofern die zugrunde liegende Rechtslage zwischenzeitlich geändert worden ist oder die im Einzelfall zuständige Krankenkasse abweichende Werte zugrunde legt.',
+ 'group.bav': 'Zuschuss und Auszahlungsformen im Einzelnen',
+ 'group.person': 'Zeitachse, Ausscheiden aus dem Beschäftigungsverhältnis, Teilzeit',
+ 'group.steuer': 'Steuer, Veranlagungsart, Kinder',
+ 'group.markt': 'Kosten und Inflation',
+ 'group.ruhe': 'Ruhestand',
+ 'group.p_sv': 'Rechengrößen: Sozialversicherung 2026',
+ 'group.p_est': 'Rechengrößen: Einkommensteuertarif 2026 (§ 32a EStG)',
+ 'group.p_kap': 'Rechengrößen: Kapitalertrag- und Investmentsteuer',
+ 'group.p_bav': 'Rechengrößen: betriebliche und geförderte private Altersvorsorge',
+
+ /* ---------------- Hinweise an den Eingabefeldern ---------------- */
+ 'n.beitrag.ueber8': function(p, f){
+ return 'Der eingetragene Betrag überschreitet 8 vom Hundert der Beitragsbemessungsgrenze Rentenversicherung ('
+ + f.eur(p.v8) + ' jährlich). Der übersteigende Anteil ist weder steuer- noch sozialversicherungsrechtlich '
+ + 'begünstigt — er wird dem Versicherungsmantel zugeführt und unterliegt dort ausschließlich der '
+ + 'Beitragspflicht in der Krankenversicherung.'; },
+ 'n.beitrag.ueber4': function(p, f){
+ return 'Der eingetragene Betrag überschreitet 4 vom Hundert der Beitragsbemessungsgrenze Rentenversicherung ('
+ + f.eur(p.v4) + ' jährlich). Bis zu diesem Betrag besteht ein Rechtsanspruch gemäß § 1a BetrAVG, für den '
+ + 'darüber hinausgehenden Betrag ist die Zustimmung des Arbeitgebers erforderlich.'; },
+ 'n.agzus.gedeckelt': function(p, f){
+ return 'Begrenzt auf ' + f.pct(p.quote, 1) + '. Die tatsächliche Ersparnis des Arbeitgebers beläuft sich '
+ + 'auf ' + f.eur2(p.ersparnis) + ' jährlich — höhere Werte bewirken keine Änderung, solange der '
+ + 'Berechnungsmodus „spitz berechnet" beibehalten wird.'; },
+ 'n.agz_fix.fliesstNicht': function(p, f){
+ return 'Kein Zufluss: Der Monatsbeitrag in Höhe von ' + f.eur2(p.beitrag) + ' liegt unterhalb der '
+ + 'Mindestschwelle von ' + f.eur2(p.schwelle) + ' (Eingabefeld unter „Ergänzende Angaben").'; },
+ 'n.agz_fix.ueber4': function(p, f){
+ return 'Der feste Zuschuss überschreitet für sich genommen den 4-%-Höchstbetrag (' + f.eur(p.topf)
+ + ' jährlich) um ' + f.eur(p.ueber) + '. Dieser Anteil wäre im vorliegenden Fall beitragspflichtiges '
+ + 'Arbeitsentgelt — die hieraus resultierende zusätzliche Beitragslast wird im Berechnungsmodell NICHT '
+ + 'gegengerechnet, wodurch die bAV insoweit begünstigt dargestellt wird.'; },
+ 'n.agz_fix.verdraengung': function(p, f){
+ return 'Belegt vorrangig den 4-%-Höchstbetrag: Vom eigenen Beitrag verbleiben lediglich '
+ + f.eur(p.rest) + ' sozialversicherungsfrei. Der Nettoaufwand erhöht sich hierdurch — der Zuschuss '
+ + 'stellt gleichwohl eine unentgeltliche Zuwendung dar, es verschiebt sich lediglich die Grenze der '
+ + 'Eigenförderung.'; },
+ 'n.agz_fix.ueber8': 'Gemeinsam mit dem Eigenbeitrag wird die Grenze von 8 vom Hundert der Beitragsbemessungsgrenze Rentenversicherung überschritten — der übersteigende Betrag ist weder steuer- noch beitragsrechtlich begünstigt.',
+ 'n.agz_fix_min.knapp': function(p, f){
+ return 'Der eingetragene Wert liegt lediglich ' + f.eur2(p.d) + ' oberhalb der maßgeblichen Schwelle. Bei '
+ + 'Unterschreitung entfällt der feste Zuschuss vollständig: die Grenzrendite des letzten '
+ + 'Beitragseuros ist an dieser Stelle unendlich, die Kopplung zwischen Brutto- und Nettobetrag ist '
+ + 'dort unstetig.'; },
+ 'n.agz_fix_min.verfehlt': function(p, f){
+ return 'Die Schwelle wird nicht erreicht — ein um ' + f.eur2(p.fehlt) + ' höherer Monatsbetrag würde einen '
+ + 'Zuschuss in Höhe von ' + f.eur2(p.zuschuss) + ' auslösen. Es handelt sich hierbei nahezu durchgängig '
+ + 'um den ertragreichsten Euro innerhalb des gesamten Berechnungsmodells.'; },
+ 'n.teilkap.kosten': function(p, f){
+ return 'Es entstehen ' + (p.gewinn ? 'keine Kosten, vielmehr: ' + p.dtxt : 'Kosten in Höhe von ' + p.dtxt + ' ' + p.unit)
+ + ' im Vergleich zur ausschließlichen Verrentung. Grund hierfür: der Einmalbetrag unterliegt im '
+ + 'Zuflussjahr der vollen Steuerpflicht (Grenzbelastung in diesem Zeitpunkt ' + f.pct(p.grenz, 1)
+ + ') und wird im Anschluss lediglich zum Satz der Abgeltungsteuer statt zur Produktrendite verzinst.'; },
+ 'n.av_auszform.horizont': function(p, f){
+ return 'Über den Vergleichshorizont hinaus wird aus dieser Rentenzahlung ein weiterer Betrag von ' + f.eur(p.rest)
+ + ' geleistet, welcher an dieser Stelle NICHT berücksichtigt wird. Ein fest gewählter Zeithorizont führt '
+ + 'systematisch zu einer Unterschätzung jeder lebenslangen Rentenzahlung — bei höherem erreichtem '
+ + 'Lebensalter ergibt sich insoweit ein Vorteil.'; },
+
+ /* ---------------- Ergebnisdarstellung ---------------- */
+ 'card.lead': 'an erster Stelle stehend',
+ 'card.unchanged': 'unverändert',
+ 'base.pinned': 'Δ gegenüber dem hinterlegten Referenzwert',
+ 'base.delta': function(p){ return 'Δ ' + p.desc; },
+ 'base.none': 'Es wird um Betätigung eines der vorstehend aufgeführten Regler gebeten. Die hieraus resultierende Änderung des Berechnungsergebnisses wird sodann an dieser Stelle als Differenzbetrag (Δ) ausgewiesen.',
+ 'base.desc.prev': 'vorheriger Stand',
+ 'base.desc.pinned': 'hinterlegter Referenzwert',
+ 'base.desc.change': function(p){ return 'vor Änderung des Wertes „' + p.label + '"'; },
+ 'rank.swap': function(p, f){
+ return '<b>Die Kennzahlen führen zu einem unterschiedlichen Ergebnis.</b> Bezogen auf die monatliche Leistung liegt '
+ + p.a + ' vor ' + p.b + ', bezogen auf den Barwert des Netto-Ertrags verhält es sich umgekehrt. '
+ + 'Grund hierfür: der Barwert wird mit der Inflationsrate abgezinst (' + f.pct(p.infl, 2) + '), die '
+ + 'monatliche Leistung hingegen mit dem Wiederanlagezins nach Steuern verrentet (' + f.pct(p.wiederanl, 2) + '). '
+ + 'Je größer die Differenz zwischen beiden Werten ausfällt, desto vorteilhafter stellt sich eine frühzeitige '
+ + 'Kapitalauszahlung dar. Welche Kennzahl maßgeblich ist, hängt davon ab, ob eine Anlage oder ein Verbrauch '
+ + 'des Betrags beabsichtigt ist — im letzteren Fall ist der Wert im Feld „Kosten des privaten ETF-Depots" '
+ + 'derart zu setzen, dass sich der Wiederanlagezins dem Wert null annähert.'; },
+ 'warn.unreachable': 'Der eingegebene monatliche Nettoaufwand ist nach Maßgabe der übrigen Angaben nicht erreichbar, da er das eingegebene Jahresbruttoeinkommen übersteigt. Der Berechnung ist daher von Amts wegen der höchstmögliche zulässige Wert zugrunde gelegt worden; einer gesonderten Bestätigung durch die Nutzerin bzw. den Nutzer bedurfte es hierfür nicht.',
+ 'warn.inactive': 'Nach den vorliegenden Angaben besteht im ersten Berechnungsjahr kein Beschäftigungsverhältnis mehr. Mangels Beschäftigungsverhältnisses findet eine Entgeltumwandlung im Sinne des § 1a BetrAVG nicht statt, sodass auch kein monatlicher Nettoaufwand vorliegt, aus welchem im Wege der Rückrechnung ein Bruttobeitrag ermittelt werden könnte. Es wird daher um Überprüfung der unter „Ausscheiden aus dem Beschäftigungsverhältnis" sowie unter „Lebensalter, gegenwärtig" getätigten Angaben gebeten.',
+
+ /* ---------------- Ergebnisfeststellung ---------------- */
+ 'verdict.lead': function(p){
+ return '<b>' + p.satz + '</b> weist mit ' + p.wert + ' den höchsten Wert auf — ' + p.d2 + ' mehr als ' + p.nom2
+ + (p.nom3 ? ' sowie ' + p.d3 + ' mehr als ' + p.nom3 : '') + '.'; },
+ 'verdict.pp': function(p){ return p.v + ' Prozentpunkte'; },
+ 'verdict.top': function(p, f){
+ return ' Den größten Einzelposten im Abstand ' + p.gen + ' gegenüber dem privaten ETF-Depot bildet der Punkt '
+ + '„' + p.label + '" — und zwar ' + (p.pro ? 'zugunsten' : 'zulasten') + ' ' + p.gen
+ + ', in Höhe von ' + f.eur(p.wert) + ' Barwert. Die vollständige Aufgliederung ist unter „Werttreiber" ausgewiesen.'; },
+ 'verdict.band': function(p, f){
+ return '<span class="band">Zur Belastbarkeit dieses Ergebnisses: Bei einer Bruttorendite von ' + f.pct(p.lo, 1)
+ + ' anstelle von ' + f.pct(p.mid, 1) + ' ergäbe sich der Wert ' + p.vlo + ', bei ' + f.pct(p.hi, 1) + ' der Wert '
+ + p.vhi + ' — die Rangfolge '
+ + (p.stabil ? 'bleibt innerhalb dieser Bandbreite unverändert.'
+ : '<b>kehrt sich innerhalb dieser Bandbreite um</b>, das vorstehende Ergebnis ist insoweit nicht belastbar.')
+ + '</span>'; },
+ 'demo.text': '<b>Es wird darauf hingewiesen, dass es sich bei den gegenwärtig angezeigten Angaben ausschließlich um Beispielwerte handelt, welchen keinerlei Aussagekraft für den Einzelfall beizumessen ist.</b> Der Berechnung sind derzeit zugrunde gelegt: ein Lebensalter von 40 Jahren, ein Jahresbruttoeinkommen in Höhe von 75.000 €, eine monatliche Entgeltumwandlung in Höhe von 300 € sowie das Bestehen einer gesetzlichen Krankenversicherung. Es wird um Eintragung der individuellen Angaben unter „Von der Nutzerin bzw. dem Nutzer beizubringende Angaben" gebeten; der vorliegende Hinweis entfällt sodann selbsttätig, ohne dass es einer gesonderten Handlung bedürfte.',
+
+ /* ---------------- Mitlaufende Leiste ---------------- */
+ 'sb.cap': function(p){ return p.label + ' · ' + p.unit + (p.kaufkraft ? ', heutige Kaufkraft' : ''); },
+ 'sb.aria': function(p){ return 'Ergebnis: ' + p.label; },
+
+ /* ---------------- Grafische Darstellungen ---------------- */
+ 'tab.sens': 'Sensitivität',
+ 'tab.wf': 'Werttreiber',
+ 'tab.kap': 'Kapitalverlauf',
+ 'tab.zer': 'Monatliche Aufgliederung',
+ 'chart.error': function(p){ return 'Die grafische Darstellung kann nicht erfolgen: ' + p.msg; },
+ 'sens.readout': 'Die gestrichelt dargestellte Linie kennzeichnet den gegenwärtig eingegebenen Wert. Die kreisförmigen Markierungen kennzeichnen diejenigen Stellen, an welchen die Kurve die Vergleichskurve des privaten Depots schneidet. Zur Anzeige der Einzelwerte ist mit dem Zeigegerät über der Kurve zu verweilen bzw. diese, sofern ein berührungsempfindliches Anzeigegerät verwendet wird, anzutippen.',
+ 'sens.legendY': function(p){ return 'y: ' + p.label + ' (' + p.unit + ')'; },
+ 'sens.note': function(p){
+ return 'Der zuletzt betätigte Regler wird über seine gesamte Bandbreite durchgerechnet — dies entspricht ' + p.n
+ + ' vollständigen Modellrechnungen. Gegenwärtig ausgewählt: „' + p.label + '". '
+ + 'Bei Betätigung eines anderen Reglers wird die dargestellte Kurve entsprechend angepasst.'; },
+ 'sens.noteNetto': function(p, f){
+ return ' Hinweis: Der vorliegende Regler bewirkt zugleich eine Änderung des Nettoaufwands (im vorliegenden '
+ + 'Fall zwischen ' + f.eur2(p.lo) + ' und ' + f.eur2(p.hi) + ' monatlich) und mithin des Betrags, welcher '
+ + 'in sämtlichen drei Gestaltungsvarianten angelegt wird. Die drei Kurven sind daher bei jedem einzelnen '
+ + 'x-Wert untereinander vergleichbar, das Niveau zwischen unterschiedlichen x-Werten hingegen nicht. Die '
+ + 'Knickstellen befinden sich an den Beitragsbemessungsgrenzen (' + f.eur(p.bbgkv) + ' für Kranken-/'
+ + 'Pflegeversicherung, ' + f.eur(p.bbgrv) + ' für Renten-/Arbeitslosenversicherung) sowie an den '
+ + 'Tarifeckwerten.'; },
+ 'wf.up': 'erhöht den Ertrag',
+ 'wf.down': 'mindert den Ertrag',
+ 'wf.legend': 'Barwert des Netto-Ertrags, heutige Kaufkraft',
+ 'wf.check': function(p, f){
+ return 'Kontrollrechnung: ' + f.eur(p.start) + ' + ' + f.eur(p.summe) + ' = ' + f.eur(p.start + p.summe)
+ + ' (Sollwert ' + f.eur(p.ende) + ', Abweichung ' + f.nf2(p.start + p.summe - p.ende) + ' €).'; },
+ 'wf.note': 'Die vorliegende Aufgliederung ist teleskopierend, sie geht daher rechnerisch exakt auf — sie ist jedoch <b>von der gewählten Reihenfolge abhängig</b>: die einzelnen Effekte sind nicht additiv trennbar, jeder Balken misst den jeweiligen Beitrag <i>unter Zugrundelegung</i> der vorangehenden. Zur Herleitung ist der jeweilige Balken anzutippen.',
+ 'wf.barinfo': function(p){ return p.label + ': ' + p.note; },
+ 'wfb.vp.label': 'Wegfall der Vorabpauschale',
+ 'wfb.vp.note': 'Weder die bAV noch das Altersvorsorgedepot unterliegen der Vorabpauschale (§ 18 InvStG). Gemessen als Differenz zwischen privatem Depot ohne und mit Vorabpauschale. Der ausgewiesene Wert kann negativ sein: die Vorabpauschale wird zu erheblichen Teilen vom Sparer-Pauschbetrag erfasst, erhöht jedoch in voller Höhe die Kostenbasis — in diesem Fall ergibt sich für das private Depot per saldo ein Vorteil.',
+ 'wfb.zul.label': 'Zulagen und Sonderausgabenabzug',
+ 'wfb.zul.note': 'Fremdmittel gemäß dem neuen Zulagenmodell zuzüglich des Abzugs nach § 10a EStG. Gemessen durch Deaktivierung beider Förderwege.',
+ 'wfb.arch.label': 'Besteuerungsarchitektur (Restgröße)',
+ 'wfb.arch.note': 'Tarifarbitrage t₀ − t₁ sowie sämtliche verbleibenden Effekte. Als Residualgröße bestimmt, damit die Gesamtrechnung rechnerisch exakt aufgeht.',
+ 'wfb.agz.label': 'Arbeitgeberzuschuss',
+ 'wfb.agz.note': 'Fremdmittel — der einzige strukturelle Vorteil der bAV, welcher nicht aus dem Steuerrecht resultiert. Gemessen durch Deaktivierung des Zuschusses.',
+ 'wfb.tarif.label': 'Tarifarbitrage und Restgröße',
+ 'wfb.tarif.note': 'Grenzsteuersatz bei Einzahlung abzüglich Grenzsteuersatz bei Auszahlung, zuzüglich sämtlicher verbleibender Effekte. Als Residualgröße bestimmt, damit die Gesamtrechnung rechnerisch exakt aufgeht. Der Steueraufschub für sich genommen ist ohne wirtschaftlichen Wert: (1−t)(1+r)ⁿ = (1+r)ⁿ(1−t), die Multiplikation ist kommutativ.',
+ 'wfb.kvpv.label': 'Kranken-/Pflegeversicherung auf Versorgungsbezüge',
+ 'wfb.kvpv.note': '§§ 229, 250 SGB V: den vollen Beitragssatz trägt die Rentnerin bzw. der Rentner allein. Gemessen als Differenz zur Einstellung „privat krankenversichert im Ruhestand".',
+ 'wfb.ep.label': 'Verlust an Entgeltpunkten',
+ 'wfb.ep.note': 'Die Entgeltumwandlung mindert das beitragspflichtige Entgelt und mithin die gesetzliche Rente. Die Auswirkung wird netto berücksichtigt.',
+ 'kap.rentbeg': 'Beginn der Rentenzahlung',
+ 'kap.swap': 'Kapital → Rentenanspruch',
+ 'kap.legend': 'durchgezogene Linie: Gesamtbetrag &nbsp;·&nbsp; gestrichelte Linie: frei verfügbarer Betrag',
+ 'kap.readout': function(p, f){
+ return 'Zu Beginn der Rentenzahlung gebunden: bAV ' + f.eur(p.bavGeb) + ' von ' + f.eur(p.bav)
+ + ' · AV-Depot ' + f.eur(p.avGeb) + ' von ' + f.eur(p.av)
+ + ' · privates Depot ' + f.eur(0) + ' von ' + f.eur(p.priv)
+ + '. Die äquivalente monatliche Leistung wird verbraucht, sodass jede Gestaltungsvariante zum Wert null führt.'; },
+ 'kap.note': function(p, f){
+ return 'Kontostand im jeweiligen Produkt, in der Auszahlungsphase zuzüglich der netto wieder angelegten '
+ + 'Auszahlungen (' + f.pct(p.wiederanl, 2) + ' nach Steuern) und abzüglich der äquivalenten monatlichen '
+ + 'Leistung, welche tatsächlich verbraucht wird. Aus diesem Grund erreicht jede Gestaltungsvariante '
+ + 'punktgenau den Wert null. Da der Verbrauch ausschließlich von der Wiederanlage abgeht und das '
+ + 'Produktkapital im jeweiligen Produkt verbleibt, wo es mit der Produktrendite vor Steuern anwächst, '
+ + 'verlaufen die Kurven gleichwohl nicht proportional zueinander. '
+ + '— Die gestrichelte Linie zeigt den frei verfügbaren Anteil: die bAV ist bis zum Beginn der '
+ + 'Rentenzahlung vollständig gebunden (§ 1b BetrAVG regelt die Unverfallbarkeit, nicht die Verfügbarkeit), '
+ + 'beim Altersvorsorgedepot ist eine Entnahme vor Vollendung des 65. Lebensjahres förderschädlich, frei '
+ + 'verfügbar ist ausschließlich der über den Jahreshöchstbetrag hinausgehende Anteil; das private Depot '
+ + 'steht demgegenüber jederzeit zur freien Verfügung. Dies ist der einzige Gesichtspunkt, unter welchem '
+ + 'eine Kapitalauszahlung vorteilhaft erscheint. '
+ + (p.verrentet ? 'Da im vorliegenden Fall eine Verrentung des Depots erfolgt, geht auch dort das Kapital '
+ + 'an den Anbieter über — die Kurve fällt entsprechend, ohne dass hierdurch ein Vermögensverlust '
+ + 'eintritt. ' : '')
+ + 'Es wird ausdrücklich darauf hingewiesen, dass die dargestellten Kurven ausschließlich das aus DIESER '
+ + 'einen Entscheidung resultierende Vermögen abbilden, nicht das Gesamtvermögen der Nutzerin bzw. des '
+ + 'Nutzers.'; },
+ 'zer.netto': 'netto',
+ 'zer.tax': 'Steuer',
+ 'zer.kv': 'Kranken-/Pflegeversicherung',
+ 'zer.pension': 'Rente',
+ 'zer.legend': '<span><i style="background:#808080"></i>Steuer</span><span><i style="background:#800000"></i>Kranken-/Pflegeversicherung</span><span><i style="background:#800080"></i>entgangene gesetzliche Rente</span><span style="margin-left:auto">farbig hinterlegter Sockel = verbleibender Betrag</span>',
+ 'zer.readout': 'Sämtliche Beträge als gleichbleibende monatliche Leistung, in heutiger Kaufkraft. Da die Verrentung linear erfolgt, addieren sich die einzelnen Blöcke rechnerisch exakt.',
+ 'zer.note': function(p, f){
+ return 'Der zugrunde gelegte Zeitraum ist für sämtliche drei Gestaltungsvarianten identisch. Eine '
+ + 'Kapitalauszahlung wird nicht durch zwölf geteilt, sondern mit dem Wiederanlagezins nach Steuern ('
+ + f.pct(p.wiederanl, 2) + ' jährlich) auf denselben Zeitraum verrentet. Wer den Kapitalbetrag verbraucht '
+ + 'anstatt ihn anzulegen, ist insoweit im Nachteil.'; },
+
+ /* ---------------- Darstellung des Rechenwegs ---------------- */
+ 'det.h.bav': 'bAV',
+ 'det.h.av': 'AV-Depot',
+ 'det.h.priv': 'privat',
+ 'det.h.kennzahl': 'Kennzahl',
+ 'det.h.wert': 'Wert',
+ 'det.erg.netto': 'Summe der Einzahlungen aus dem Nettoeinkommen (nominal)',
+ 'det.erg.fremd': 'Fremdmittel (Zuschuss bzw. Zulagen)',
+ 'det.erg.kapital': 'Kapital zu Beginn der Auszahlungsphase',
+ 'det.erg.brutto': 'Summe der Bruttoauszahlungen',
+ 'det.erg.steuer': 'davon Einkommen- bzw. Abgeltungsteuer',
+ 'det.erg.kvpv': 'davon Kranken- und Pflegeversicherung',
+ 'det.erg.rentenverlust': 'Verlust an gesetzlicher Rente (kumuliert)',
+ 'det.erg.nettoausz': 'Summe der Netto-Auszahlungen (nominal)',
+ 'det.erg.bwausz': 'Barwert der Netto-Auszahlungen',
+ 'det.erg.bwaufw': 'Barwert des Nettoaufwands',
+ 'det.erg.ertrag': 'Barwert des Netto-Ertrags',
+ 'det.erg.verhaeltnis': 'Verhältnis von Ertrag zu Aufwand',
+ 'det.erg.irr': 'Interner Zinsfuß (nominal)',
+ 'det.erg.vorsprung': 'Vorsprung gegenüber dem privaten Depot',
+ 'det.mon.brutto': 'Bruttoleistung je Monat',
+ 'det.mon.steuer': 'abzüglich Einkommen- bzw. Abgeltungsteuer',
+ 'det.mon.kvpv': 'abzüglich Kranken- und Pflegeversicherung',
+ 'det.mon.ep': 'abzüglich Verlust an gesetzlicher Rente',
+ 'det.mon.netto': 'NETTO JE MONAT (heutige Kaufkraft)',
+ 'det.diag.beitrag': 'Bruttobeitrag zur bAV je Monat',
+ 'det.diag.aufwand': 'Nettoaufwand je Monat (erstes Jahr)',
+ 'det.diag.grenzsteuer': 'Grenzsteuersatz in der Ansparphase (erstes Jahr)',
+ 'det.diag.ersparnis': 'Ersparnisquote insgesamt (Steuer und Sozialversicherung), erstes Jahr',
+ 'det.diag.svAG': 'Tatsächliche Ersparnis des Arbeitgebers bei den Sozialversicherungsbeiträgen',
+ 'det.diag.svAN': 'Tatsächliche Ersparnis des Arbeitnehmers bei den Sozialversicherungsbeiträgen',
+ 'det.diag.ngef': 'Anteil der bAV-Beiträge ohne Förderung (erstes Jahr)',
+ 'det.diag.aussch': 'Ausschöpfung des Rechtsanspruchs (4 vom Hundert der BBG-RV)',
+ 'det.diag.agzVar': 'davon Arbeitgeberzuschuss: prozentual (erstes Jahr)',
+ 'det.diag.agzFix': 'davon Arbeitgeberzuschuss: fester Betrag (erstes Jahr)',
+ 'det.diag.agzFixUeber4': 'fester Zuschuss oberhalb des 4-%-Höchstbetrags (nicht als Beitragslast erfasst)',
+ 'det.diag.vbMonat': 'Versorgungsbezug je Monat zu Beginn der Auszahlungsphase',
+ 'det.diag.freibetrag': 'Freibetrag für Versorgungsbezüge im selben Jahr',
+ 'det.diag.vbQuote': 'Verhältnis des Versorgungsbezugs zum Freibetrag',
+ 'det.diag.kapFreiKapital': 'beitragsfrei mögliches Kapital (Kapitalauszahlung)',
+ 'det.diag.kapFreiRente': 'beitragsfrei mögliches Kapital (lebenslange Rentenzahlung)',
+ 'det.diag.memoRest': 'HINWEIS: bAV-Rentenzahlungen nach Ablauf des Vergleichshorizonts',
+ 'det.diag.memoRestAv': 'HINWEIS: Depotrente nach Ablauf des Vergleichshorizonts',
+ 'det.diag.wiederanl': 'Wiederanlagezins nach Steuern',
+ 'det.diag.kapstEff': 'Effektive Abgeltungsteuer einschließlich Solidaritätszuschlag/Kirchensteuer',
+ 'det.diag.bestAnteil': 'Besteuerungsanteil der gesetzlichen Rente',
+ 'det.anspar.h.jahr': 'Jahr',
+ 'det.anspar.h.brutto': 'Brutto',
+ 'det.anspar.h.beitrag': 'bAV-Beitrag',
+ 'det.anspar.h.agzVar': 'AG-Zuschuss %',
+ 'det.anspar.h.agzFix': 'AG fest',
+ 'det.anspar.h.sv': 'SV-Ersparnis',
+ 'det.anspar.h.st': 'Steuerersparnis',
+ 'det.anspar.h.netto': 'Nettoaufwand',
+ 'det.anspar.h.zul': 'Zulagen',
+ 'det.anspar.h.kbav': 'Kapital bAV',
+ 'det.anspar.h.kav': 'Kapital AV',
+ 'det.anspar.h.kpriv': 'Kapital privat',
+ 'det.row.year': function(p){ return p.jahr + ' (Lebensalter ' + p.alter + ')'; },
+ 'det.ausz.h.jahr': 'Jahr',
+ 'det.ausz.h.bavBr': 'bAV brutto',
+ 'det.ausz.h.kvpv': 'KV/PV',
+ 'det.ausz.h.steuer': 'Steuer',
+ 'det.ausz.h.mind': 'Rentenminderung',
+ 'det.ausz.h.bavNet': 'bAV netto',
+ 'det.ausz.h.avBr': 'AV brutto',
+ 'det.ausz.h.avNet': 'AV netto',
+ 'det.ausz.h.privBr': 'privat brutto',
+ 'det.ausz.h.privNet': 'privat netto',
+ 'det.warn.lead': 'Die eingegebenen Werte liegen außerhalb des begünstigten Bereichs: ',
+ 'det.warn.aussch': 'Bei einer Ausschöpfung von über 100 vom Hundert besteht kein Rechtsanspruch auf Entgeltumwandlung mehr. ',
+ 'det.warn.ngef': 'Ein erheblicher Anteil der Beiträge ist weder steuer- noch sozialversicherungsrechtlich begünstigt — dieser Anteil wird dem Versicherungsmantel zugeführt, ohne dass dem eine Gegenleistung außer der Beitragspflicht in der Krankenversicherung gegenübersteht. ',
+ 'det.warn.vb': 'Der Versorgungsbezug übersteigt den Freibetrag erheblich; die Schutzwirkung des absoluten Freibetrags nimmt entsprechend 1/Kapital ab. ',
+ 'det.ann.intro': 'Die Rangfolge hängt von Rechtsfragen ab, welche im Jahr 2026 noch nicht sämtlich abschließend geklärt sind. Die in Klammern angegebenen Werte stellen subjektive Vertrauensgrade dar.',
+ 'det.ann.h.annahme': 'Annahme',
+ 'det.ann.h.vertrauen': 'Vertrauensgrad',
+ 'det.ann.h.anmerkung': 'Anmerkung',
+ 'det.ann.r1.a': 'Rechengrößen Sozialversicherung 2026, Tarif gemäß § 32a EStG 2026',
+ 'det.ann.r1.c': 'SVBezGrV 2026, Steuerfortentwicklungsgesetz',
+ 'det.ann.r2.a': 'Beitragspflicht zur Kranken-/Pflegeversicherung auf Versorgungsbezüge',
+ 'det.ann.r2.c': '§§ 229, 250 SGB V',
+ 'det.ann.r3.a': 'Freibetrag gemäß § 226 Abs. 2 S. 2 SGB V (Krankenversicherung)',
+ 'det.ann.r3.c': 'unstreitig',
+ 'det.ann.r4.a': 'Freigrenze anstelle eines Freibetrags in der Pflegeversicherung',
+ 'det.ann.r4.c': 'häufigste Fehlerquelle in Ratgebertexten',
+ 'det.ann.r5.a': 'Beitragsfreiheit der Auszahlung aus dem Altersvorsorgedepot',
+ 'det.ann.r5.c': 'keine Versorgungsbezüge im Sinne des Gesetzes',
+ 'det.ann.r6.a': 'Hälftiger Unterschiedsbetrag für nicht geförderte Schichten',
+ 'det.ann.r6.c': '§ 22 Nr. 5 S. 2 Buchst. b i.V.m. § 20 Abs. 1 Nr. 6 S. 2 EStG',
+ 'det.ann.r7.a': 'Zuschuss ausschließlich bis zur tatsächlichen Ersparnis des Arbeitgebers',
+ 'det.ann.r7.c': 'nach abweichender Auffassung sind die 15 vom Hundert als reine Pauschale zu lesen',
+ 'det.ann.r8.a': 'Sonderausgaben-Höchstbetrag 2.340 €',
+ 'det.ann.r8.c': 'MODELLANNAHME. Entscheidend dafür, ob ein Kind den Wert des Altersvorsorgedepots erhöht oder mindert',
+ 'det.ann.r9.a': 'Pflichtversicherung in der Krankenversicherung der Rentner (KVdR) im Ruhestand unterstellt',
+ 'det.ann.r9.c': 'freiwillig Versicherte wurden nicht gesondert geprüft',
+ 'det.ann.notmodelled': '<b>Nicht Gegenstand der Modellierung:</b> Abschläge bei vorzeitigem Rentenbezug, Auswirkung der Entgeltumwandlung auf Kranken-, Arbeitslosen- und Elterngeld, Hinterbliebenenversorgung, Insolvenzsicherung (PSVaG), Portabilität bei Arbeitgeberwechsel, Kinderabschläge in der Pflegeversicherung, Günstigerprüfung gemäß § 32d Abs. 6 EStG, Pfändungs- und Grundsicherungsschutz, Langlebigkeitsrisiko über den Vergleichshorizont hinaus.',
+ 'det.prinzip': '<p>Ein Vergleich der jeweiligen <i>Bruttobeiträge</i> wäre unangemessen: Die Entgeltumwandlung erfolgt aus dem Bruttoeinkommen, das private Sparen hingegen aus dem Nettoeinkommen. Aus diesem Grund wird der <b>Nettoaufwand</b> gleichgesetzt:</p>'
+ + '<p style="font-family:var(--mono);font-size:.82rem;background:var(--chip);padding:9px 11px;border-radius:9px">Nettoaufwand = Bruttobeitrag − Lohnsteuerersparnis − ersparter Arbeitnehmeranteil zur Sozialversicherung</p>'
+ + '<p>Der genannte Betrag wird in sämtlichen drei Gestaltungsvarianten angelegt. Das verbleibende Ergebnis stellt einen Vergleich der jeweiligen <i>Förderarchitekturen</i> dar, nicht der Einzahlungshöhen.</p>'
+ + '<p><b>Ein Steueraufschub ist für sich genommen ohne wirtschaftlichen Wert:</b> (1−t)·(1+r)ⁿ = (1+r)ⁿ·(1−t). Die Multiplikation ist kommutativ. Es verbleiben lediglich vier maßgebliche Werttreiber:</p>'
+ + '<ol style="padding-left:1.2em;margin:.3em 0"><li>Tarifarbitrage t₀ − t₁</li>'
+ + '<li>Fremdmittel — Arbeitgeberzuschuss bzw. Zulagen</li>'
+ + '<li>steuerfreie Thesaurierung — keine Vorabpauschale</li>'
+ + '<li>zusätzliche Abgaben, welche ausschließlich eine Gestaltungsvariante betreffen — Kranken-/Pflegeversicherung auf Versorgungsbezüge</li></ol>'
+ + '<p>Der unter Punkt 4 genannte Aspekt stellt den maßgeblichen Nachteil der bAV dar, der unter Punkt 2 genannte Aspekt ihren einzigen strukturellen Vorteil. Die Rendite der bAV <b>fällt streng monoton mit steigender Beitragshöhe</b>, da der Freibetrag einen absoluten Betrag darstellt und dessen Schutzwirkung entsprechend 1/K abnimmt — ein inneres Optimum existiert nicht.</p>'
+ + '<p>Bei Vorgabe des Nettoaufwands wird der Bruttobeitrag mittels Bisektionsverfahren zurückgerechnet: N(B) ist stetig und streng monoton wachsend (dN/dB = 1 − Grenzbeitragssatz zur Sozialversicherung − Grenzsteuersatz > 0); aufgrund der Knickstellen bei 4 und 8 vom Hundert der Beitragsbemessungsgrenze Rentenversicherung sowie an den Beitragsbemessungsgrenzen und Tarifeckwerten ist eine geschlossene Umkehrung jedoch nicht möglich. Das angewandte Verfahren mit 34 Intervallhalbierungen liefert eine Genauigkeit unterhalb eines Zehntelcents.</p>',
+ 'det.t.prinzip': 'Das Vergleichsprinzip',
+ 'det.t.erg': 'Ergebnis im Einzelnen',
+ 'det.s.erg': 'Sämtliche drei Gestaltungsvarianten verursachen in der Ansparphase exakt denselben Betrag aus dem Nettoeinkommen.',
+ 'det.t.mon': 'Monatliche Leistung, aufgegliedert',
+ 'det.s.mon': 'Sämtliche Gestaltungsvarianten über denselben Zeitraum verrentet, in heutiger Kaufkraft. Da die Verrentung linear erfolgt, addieren sich die einzelnen Zeilen rechnerisch exakt.',
+ 'det.t.diag': 'Diagnose',
+ 'det.s.diag': 'Ursache des Ergebnisses — sowie Angabe, an welcher Stelle die eingegebenen Werte außerhalb des begünstigten Bereichs liegen.',
+ 'det.t.anspar': 'Ansparphase, jahresweise Darstellung',
+ 'det.t.ausz': 'Auszahlungsphase, jahresweise Darstellung',
+ 'det.t.ann': 'Belastbarkeit der zugrunde gelegten Annahmen',
+
+ /* ---------------- Speicherung und Weitergabe ---------------- */
+ 'msg.linkCopied': 'Der Verweis wurde kopiert. Personen, welche diesen aufrufen, erhalten Einsicht in exakt die vorliegenden Werte — eine Übertragung über einen Server erfolgt nicht.',
+ 'msg.linkFailed': 'Das Kopieren war nicht erfolgreich. Der Verweis steht nunmehr in der Adresszeile zur Verfügung.',
+ 'msg.loaded': 'Die Datei wurde eingelesen.',
+ 'msg.loadError': function(p){ return 'Die Datei konnte nicht eingelesen werden: ' + p.msg; },
+ 'msg.reset': 'Die Angaben wurden auf den Ausgangsfall zurückgesetzt.',
+
+ /* ---------------- Anwendung als Progressive Web App ---------------- */
+ 'pwa.offline': '<b>Offlinefähigkeit gegeben.</b> Die Anwendung liegt nunmehr im Zwischenspeicher des Browsers vor und ist auch ohne bestehende Verbindung nutzbar. Zur Installation: bei Verwendung eines iPhone über „Teilen" → „Zum Home-Bildschirm", bei Verwendung von Android über das Menü → „App installieren".',
+ 'pwa.installAsk': '<b>Installation der Anwendung?</b> Im Fall einer Installation steht diese mit eigenem Symbol auf dem Startbildschirm zur Verfügung und ist offline nutzbar. ',
+ 'pwa.installBtn': 'Installieren',
+ 'pwa.installed': '<b>Die Installation wurde durchgeführt.</b> Die Anwendung ist nunmehr unter den übrigen installierten Anwendungen auffindbar.',
+ 'pwa.declined': 'Zur Kenntnis genommen — die Anwendung ist auch ohne Installation nutzbar, und zwar ebenfalls offline.',
+ 'pwa.file': '<b>Die Datei wurde unmittelbar geöffnet</b> (<kbd>file://</kbd>). Sämtliche Berechnungen werden durchgeführt, sämtliche Eingaben werden gespeichert. Es fehlen lediglich zwei Eigenschaften der Progressive Web App: ein Symbol auf dem Startbildschirm sowie ein Offline-Zwischenspeicher — Letzterer wäre im vorliegenden Fall ohnehin entbehrlich, da die Datei bereits auf dem Gerät vorliegt. Für die vollständige Funktionalität einer Progressive Web App wird empfohlen, den betreffenden Ordner auf einen HTTPS-fähigen Webspace zu übertragen und von dort aus zu öffnen.'
+};
diff --git a/app/i18n.de-x-sales.js b/app/i18n.de-x-sales.js
new file mode 100644
index 0000000..c88bf98
--- /dev/null
+++ b/app/i18n.de-x-sales.js
@@ -0,0 +1,599 @@
+/* =====================================================================
+ Wörterbuch Deutsch, Register „Vertrieb" (BCP 47 § 2.2.7, privater
+ Untertag de-x-sales) — VOLLSTÄNDIG (459 Schlüssel).
+
+ Keine Übersetzung, sondern eine Stilvariante derselben Sprache: exakt
+ dieselben Zahlen, Formeln und Paragraphen wie im Wörterbuch Deutsch
+ (i18n.de.js) und im Amtsdeutsch (i18n.de-x-amt.js), aber in der
+ Diktion eines Vertriebs- bzw. Werbetextes — Imperativ, direkte
+ Anrede, Vorteilsformulierung, Ausrufezeichen, kurze Sätze. Derselbe
+ § 1a BetrAVG, der im Amtsdeutsch „Ein Rechtsanspruch besteht nur bis
+ zur Höhe von vier vom Hundert der Beitragsbemessungsgrenze" heißt,
+ wird hier zu „Bis zu 4 % on top — geschenkt vom Gesetzgeber!".
+
+ Wichtig: Zahlen, Rechenergebnisse und Rechtsaussagen ändern sich
+ nicht — nur die Verpackung. Auch Warnhinweise bleiben inhaltlich
+ vollständig erhalten (Risikohinweise gehören in echter Finanzwerbung
+ ebenso zum Pflichttext wie das Kleingedruckte); sie werden lediglich
+ in denselben Ton gesetzt wie der Rest der Seite, nicht abgeschwächt.
+
+ Vertrauensgrad: muttersprachliche Stiltransformation, kein
+ Übersetzungsrisiko. Das Risiko liegt in der Registertreue an den
+ Stellen, wo Vertriebsdeutsch mit fachlicher Präzision kollidiert
+ (Formeln, Paragraphen) — dort bleibt der Fachbegriff unangetastet
+ und nur der Rahmensatz wird verkauft. Vertrauensgrad ca. 90 %.
+ ===================================================================== */
+window.I18N_DE_X_SALES = {
+ 'f.I:gehalt.label': 'Ihr Jahresgehalt brutto',
+ 'f.I:gehalt.hint': 'Ohne Einmalzahlungen — das 13. Gehalt dürfen Sie anteilig mitzählen, wenn Sie mögen. Damit wissen wir, wo Sie steuerlich stehen und ob für Sie noch mehr drin ist als die üblichen Grenzen.',
+ 'f.I:beitrag.label': 'Ihr Monatsbeitrag zur bAV, brutto',
+ 'f.I:beitrag.hint': 'Bruttoentgeltumwandlung nach § 1a BetrAVG — Ihr gesetzlicher Anspruch reicht bis 4 % der Beitragsbemessungsgrenze RV, quasi geschenkt vom Gesetzgeber. Wer mehr will, braucht nur das Okay vom Arbeitgeber — meistens eine Formsache!',
+ 'f.I:netto_ziel.label': 'Ihr monatlicher Nettoaufwand',
+ 'f.I:netto_ziel.hint': 'Das ist der einzige Betrag, der Ihnen wirklich fehlt — alles andere zahlt der Staat oder der Chef mit. Genau diesen Betrag stecken wir fair in alle drei Varianten, damit Sie 1:1 vergleichen können. Und keine Sorge: der Zusammenhang zum Bruttobeitrag ist glasklar monoton, wir rechnen das mit 34 Verfeinerungsschritten bis auf den Zehntelcent genau für Sie durch.',
+ 'f.I:agzus.label': 'Zuschuss von Ihrem Arbeitgeber',
+ 'f.I:agzus.hint': 'Mindestens 15 % on top schreibt der Gesetzgeber vor (§ 1a Abs. 1a BetrAVG) — viele Arbeitgeber legen sogar noch eine Schippe drauf! Ab etwa z ≈ 26,7 % schlägt die bAV rechnerisch das Privatdepot — mit der Sensitivitätskurve können Sie das live nachverfolgen.',
+ 'f.I:agz_fix.label': 'Extra: fester Zuschuss obendrauf',
+ 'f.I:agz_fix.hint': 'Ein fixer Bonus aus Tarifvertrag oder Betriebsvereinbarung — bei der Deutschen Bahn und vielen anderen ganz normal, und zwar zusätzlich zu den 15 % aus § 1a Abs. 1a BetrAVG! Der fließt garantiert steuerfrei in Ihre 8-%- und 4-%-Töpfe (§ 1 Abs. 1 S. 1 Nr. 9 SvEV) — Ihre eigene Umwandlung rutscht dadurch etwas nach hinten, macht aber unterm Strich nichts, denn geschenktes Geld bleibt geschenktes Geld!',
+ 'f.I:agz_fix_dyn.label': 'Festen Zuschuss mitwachsen lassen',
+ 'f.I:agz_fix_dyn.hint': 'Festbeträge stehen meist fix im Tarifvertrag und werden erst bei der nächsten Tarifrunde nachgezogen — Standardannahme deshalb „bleibt gleich". Über 27 Jahre bei 2 % Inflation ist real noch der Faktor 1,02⁻²⁷ ≈ 0,59 übrig; wer optimistischer plant, wählt einfach „wächst mit dem Gehalt"!',
+ 'f.I:agz_fix_dyn.o0': 'bleibt gleich',
+ 'f.I:agz_fix_dyn.o1': 'wächst mit dem Gehalt',
+ 'f.I:agzus_sv.label': 'So rechnen wir Ihren Zuschuss',
+ 'f.I:agzus_sv.hint': '„Spitz" ist die gesetzestreue Variante: Ihr Arbeitgeber zahlt genau so viel drauf, wie er selbst an Sozialabgaben spart (§ 1a Abs. 1a BetrAVG). Liegen Sie über beiden Beitragsbemessungsgrenzen, spart er nichts — dann gibt es leider auch nichts obendrauf. Deshalb pendelt sich der Regler meist bei rund 21 % ein. „Voller Beitrag" und „sv-freier Anteil" sind die großzügigeren Varianten, die manche Arbeitgeber freiwillig zahlen. Vertrauensgrad der spitzen Lesart: 75 %.',
+ 'f.I:agzus_sv.o0': 'voller Beitrag',
+ 'f.I:agzus_sv.o1': 'sv-freier Anteil',
+ 'f.I:agzus_sv.o2': 'spitz gerechnet',
+ 'f.I:dyn.label': 'Beitrag mitwachsen lassen',
+ 'f.I:dyn.hint': 'Wächst Ihr Beitrag mit dem Gehalt, bleibt Ihr 8-%-Topf Jahr für Jahr optimal ausgeschöpft. Bleibt er starr, verliert er real an Wert — und Ihr Vergleichsbetrag für die beiden anderen Varianten schrumpft entsprechend mit.',
+ 'f.I:dyn.o1': 'wächst mit dem Gehalt',
+ 'f.I:dyn.o0': 'bleibt gleich',
+ 'f.I:rendite.label': 'ETF-Rendite p.a., brutto',
+ 'f.I:rendite.hint': 'Vor Kosten, vor Steuern. Wir setzen in allen drei Varianten denselben ETF an — so vergleichen Sie wirklich Äpfel mit Äpfeln, nur die Förderung macht den Unterschied!',
+ 'f.I:alter.label': 'Ihr Alter heute',
+ 'f.I:alter.hint': 'Startschuss für Ihre Ansparphase. Kalenderjahr 0 = 2026.',
+ 'f.I:alter.unit': 'Jahre',
+ 'f.I:rentbeg.label': 'Wann soll’s losgehen?',
+ 'f.I:rentbeg.hint': 'Auszahlungsbeginn für alle drei Varianten. Das Altersvorsorgedepot zahlt frühestens ab 65 aus (neu seit der Reform 2026).',
+ 'f.I:rentbeg.unit': 'Jahre',
+ 'f.I:kv_ruhe.label': 'Krankenversicherung im Ruhestand',
+ 'f.I:kv_ruhe.hint': 'Der Punkt, der wirklich den Unterschied macht! In der GKV gelten Betriebsrenten als Versorgungsbezüge und werden voll verbeitragt (§§ 229, 250 SGB V) — Ihr Altersvorsorgedepot bleibt hier außen vor. Diese eine Einstellung dreht das ganze Ergebnis.',
+ 'f.I:kv_ruhe.o1': 'gesetzlich versichert',
+ 'f.I:kv_ruhe.o2': 'privat versichert',
+ 'f.I:auszform.label': 'So möchten Sie Ihre bAV genießen',
+ 'f.I:auszform.hint': 'Kapital: einmal volle Kanne versteuern, KV-Beiträge werden dafür freundlicherweise auf 120 Monate gestreckt (§ 229 Abs. 1 S. 3 SGB V). Rente: läuft ein Leben lang und schont dabei Ihren Freibetrag gleich um ein Vielfaches. Ganz oder gar nicht — eine Teilkapitalisierung bieten wir hier (noch) nicht an.',
+ 'f.I:auszform.o1': 'Kapital auf einen Schlag',
+ 'f.I:auszform.o2': 'Rente, ein Leben lang',
+ 'f.I:teilkap.label': 'Altersvorsorgedepot: Startbonus als Einmalbetrag',
+ 'f.I:teilkap.hint': 'Bis zu 30 % Ihres angesparten Kapitals holen Sie sich gleich zu Beginn als Einmalbetrag ab — bei beiden Auszahlungsformen möglich! Kostet zwar etwas Progression im ersten Jahr, dafür haben Sie das Geld sofort in der Tasche. Was über den Jahreshöchstbetrag hinausgeht (unser „Sleeve"), verrenten wir automatisch mit — kein Paragraf, nur unsere praktische Modellregel.',
+ 'f.I:av_auszform.label': 'Altersvorsorgedepot: der Rest',
+ 'f.I:av_auszform.hint': 'So läuft’s mit dem Kapital nach dem Einmalbetrag — unabhängig davon, was Sie bei der bAV wählen. Auszahlungsplan: bleibt investiert, wird verzinst ausgezahlt, die ungeförderte Schicht zahlt nur den halben Unterschiedsbetrag. Lebenslange Rente: das Kapital geht an den Anbieter, dafür wird die ungeförderte Schicht mit nur dem Ertragsanteil besteuert (§ 22 Nr. 5 S. 2 Buchst. a EStG, ab 67 nur 17 % statt der hier üblichen 26 %) — richtig günstig! Die geförderte Schicht bleibt in beiden Fällen voll nachgelagert steuerpflichtig, das lässt sich nicht wegverkaufen.',
+ 'f.I:av_auszform.o1': 'Auszahlungsplan',
+ 'f.I:av_auszform.o2': 'Rente, ein Leben lang',
+ 'f.I:agz_fix_min.label': 'Mindesteinsatz für den Extra-Zuschuss',
+ 'f.I:agz_fix_min.hint': 'Manche Arbeitgeber koppeln den Bonus an eine Mindestbeteiligung nach dem Motto „ab X ist Y garantiert". 0 bedeutet: bedingungslos — der Zuschuss fließt in jedem aktiven Jahr, auch ganz ohne eigenen Beitrag! Kleiner Praxistipp: Ein wirklich bedingungsloser Zuschuss ist streng genommen kein Argument FÜR die Umwandlung, weil er sowieso fließt — bitte nur eintragen, was wirklich an Ihre Teilnahme geknüpft ist.',
+ 'f.I:rentfak_av.label': 'Rentenfaktor Ihres Altersvorsorgedepots',
+ 'f.I:rentfak_av.hint': 'Nur relevant, wenn Sie sich fürs Verrenten entscheiden. Voreingestellt wie bei der bAV; ein Depotvertrag kommt ohne teuren Versicherungsmantel aus und ist deshalb oft günstiger — den genauen Wert liefert Ihnen Ihr Angebot. Bei 0 gibt’s keine Rente.',
+ 'f.I:rentfak_av.unit': '€ je 10.000 €',
+ 'f.I:rentdyn_av.label': 'Wachstum Ihrer Depotrente p.a.',
+ 'f.I:rentdyn_av.hint': 'Überschussbeteiligung bzw. Fondsentwicklung während der Rentenphase Ihres Depotvertrags.',
+ 'f.I:rentfak.label': 'Rentenfaktor Ihrer bAV',
+ 'f.I:rentfak.hint': 'Nur bei Auszahlungsform „Rente" wichtig. 26 € Monatsrente je 10.000 € entspricht etwa 3,1 % Entnahmequote — steht ganz genau in Ihrem Produktinformationsblatt.',
+ 'f.I:rentfak.unit': '€ je 10.000 €',
+ 'f.I:rentdyn.label': 'Wachstum Ihrer bAV-Rente p.a.',
+ 'f.I:rentdyn.hint': 'Überschussbeteiligung bzw. Fondsentwicklung während der Rentenphase.',
+ 'f.I:fuenftel.label': 'Fünftelregelung mitnehmen?',
+ 'f.I:fuenftel.hint': 'Der Steuervorteil nach § 34 EStG greift bei planmäßiger Kapitalabfindung aus § 3 Nr. 63-Verträgen leider nur in Ausnahmefällen (BFH X R 23/15). Wir rechnen sicherheitshalber ohne — konservativ, aber ehrlich.',
+ 'f.I:fuenftel.o0': 'nein (auf Nummer sicher)',
+ 'f.I:fuenftel.o1': 'ja',
+ 'f.I:planende.label': 'Bis wohin vergleichen wir?',
+ 'f.I:planende.hint': 'Bis hierhin laufen die Auszahlungspläne. Lebenslange Renten vergleichen wir über denselben Zeitraum fair mit — was danach noch on top kommt, sehen Sie als Bonus-Hinweis unter „Diagnose". Wer alt wird, macht hier das beste Geschäft!',
+ 'f.I:planende.unit': 'Jahre',
+ 'f.I:ausscheid.label': 'Ausstieg aus dem Job',
+ 'f.I:ausscheid.hint': 'Ab hier: kein Gehalt, keine Beiträge mehr. Ihr Kapital verzinst sich trotzdem munter weiter bis zum Rentenbeginn.',
+ 'f.I:ausscheid.unit': 'Jahre',
+ 'f.I:tzalter.label': 'Teilzeit ab wann?',
+ 'f.I:tzalter.hint': 'Jeder Wert ab Rentenbeginn heißt schlicht: keine Teilzeit. Voreingestellt: 67.',
+ 'f.I:tzalter.unit': 'Jahre',
+ 'f.I:tzfaktor.label': 'Ihr Teilzeitfaktor',
+ 'f.I:tzfaktor.hint': 'Anteil am Vollzeitgehalt. 60 % = 60-%-Stelle.',
+ 'f.I:gsteig.label': 'Gehaltssteigerung p.a.',
+ 'f.I:gsteig.hint': 'Zieht ganz automatisch Beitragsbemessungsgrenzen, Bezugsgröße, Durchschnittsentgelt und Rentenwert mit hoch.',
+ 'f.I:stkl.label': 'Ihre Veranlagung',
+ 'f.I:stkl.hint': 'Wichtig ist die VERANLAGUNGSART, nicht die Lohnsteuerklasse — die Klasse ist nur der unterjährige Vorschuss, am Jahresende rechnet das Finanzamt sowieso mit Splitting (§ 32a Abs. 5 EStG). Bei „zusammen" bitte unbedingt das zvE Ihres Partners mit angeben, sonst stimmt die Rechnung nicht!',
+ 'f.I:stkl.o1': 'einzeln',
+ 'f.I:stkl.o3': 'zusammen (Splitting-Bonus)',
+ 'f.I:partner.label': 'zvE Ihres Partners',
+ 'f.I:partner.hint': 'Nur bei Zusammenveranlagung relevant. Wir rechnen 2·ESt((zvE + zvE_Partner)/2).',
+ 'f.I:kist.label': 'Ihr Kirchensteuersatz',
+ 'f.I:kist.hint': '8 % in Bayern und Baden-Württemberg, sonst 9 %, 0 wenn Sie ausgetreten sind. Wirkt sich übrigens auch auf die Abgeltungsteuer aus: 0,25/(1+0,25k)·(1+0,055+k).',
+ 'f.I:tarifanp.label': 'Steuertarif-Anpassung p.a.',
+ 'f.I:tarifanp.hint': 'Der komplette Tarif wird mit dem Faktor λ = (1+x)^t gestreckt: ESt = s·λ·T(zvE/s/λ) — technisch dasselbe wie eine proportionale Verschiebung aller Eckwerte. Bei 0 % droht die volle kalte Progression.',
+ 'f.I:kinder.label': 'Ihre Kinderanzahl',
+ 'f.I:kinder.hint': 'Kinderzulage im Altersvorsorgedepot: 1 € pro eingezahltem €, bis zu 300 € pro Kind — geschenkt!',
+ 'f.I:kind_jahre.label': 'Jahre mit Kinderzulage',
+ 'f.I:kind_jahre.hint': 'Die Kinderzulage läuft, solange Kindergeldanspruch besteht (§ 85 EStG) — also nicht über die komplette Ansparphase.',
+ 'f.I:kind_jahre.unit': 'Jahre',
+ 'f.I:kinderlos.label': 'Kinderlos? (PV-Zuschlag)',
+ 'f.I:kinderlos.hint': '0,6 Prozentpunkte Aufschlag zur Pflegeversicherung, den Arbeitnehmer allein tragen (§ 55 Abs. 3 SGB XI) — klein, aber man sollte ihn kennen.',
+ 'f.I:kinderlos.o0': 'nein',
+ 'f.I:kinderlos.o1': 'ja',
+ 'f.I:k_bav.label': 'Kosten Ihres bAV-Produkts p.a.',
+ 'f.I:k_bav.hint': 'Versicherungsmantel plus TER. Die echten Kosten stehen im Produktinformationsblatt — dort nachschauen statt raten lohnt sich!',
+ 'f.I:k_av.label': 'Kosten Altersvorsorgedepot p.a.',
+ 'f.I:k_av.hint': 'Beim Standarddepot per Gesetz gedeckelt auf maximal 1,0 % p.a. — mehr darf’s nicht kosten!',
+ 'f.I:k_priv.label': 'Kosten privates ETF-Depot p.a.',
+ 'f.I:k_priv.hint': 'Reine TER eines breiten Welt-ETF — schlank und einfach.',
+ 'f.I:infl.label': 'Inflation p.a.',
+ 'f.I:infl.hint': 'Unser Umrechner für „heutige Kaufkraft" bei allen Beträgen. Ändert an der Reihenfolge kaum etwas, macht aber alle Zahlen realistischer.',
+ 'f.I:sonst_zve.label': 'Sonstiges zvE im Ruhestand',
+ 'f.I:sonst_zve.hint': 'Vor allem der steuerpflichtige Teil Ihrer gesetzlichen Rente, ohne die hier verglichenen Produkte. Bestimmt Ihren Steuersatz in der Auszahlungsphase — und damit, wie groß Ihr Steuervorteil beim Einzahlen wirklich war.',
+ 'f.I:rente_br.label': 'Gesetzliche Bruttorente p.a.',
+ 'f.I:rente_br.hint': 'Nur für den KV-Deckel wichtig: gesetzliche Rente und Versorgungsbezüge teilen sich EINE Beitragsbemessungsgrenze (§ 223 Abs. 3 SGB V).',
+ 'f.P:bbg_rv.label': 'BBG Rentenversicherung (jährlich)',
+ 'f.P:bbg_rv.hint': 'SVBezGrV 2026 (BGBl. 2025 I Nr. 116), bundesweit einheitlich.',
+ 'f.P:bbg_kv.label': 'BBG Kranken-/Pflegeversicherung',
+ 'f.P:bbg_kv.hint': 'SVBezGrV 2026; 5.812,50 € im Monat.',
+ 'f.P:bezug.label': 'Bezugsgröße (monatlich)',
+ 'f.P:bezug.hint': 'SVBezGrV 2026, 47.460 € im Jahr. Ein Zwanzigstel davon ist Ihr Freibetrag für Versorgungsbezüge in der KV (§ 226 Abs. 2 S. 2 SGB V).',
+ 'f.P:de_rv.label': 'Durchschnittsentgelt RV',
+ 'f.P:de_rv.hint': 'Anlage 1 zu SGB VI, Wert 2026 — die Basis für Ihre Entgeltpunkte.',
+ 'f.P:rw.label': 'Aktueller Rentenwert',
+ 'f.P:rw.hint': 'Rentenwertbestimmungsverordnung 2026, ab 1.7.2026: 42,52 € — ein Plus von 4,24 %!',
+ 'f.P:rw.unit': '€',
+ 'f.P:rv_an.label': 'RV-Beitrag, Ihr Anteil',
+ 'f.P:rv_an.hint': '18,6 %, fifty-fifty mit dem Arbeitgeber.',
+ 'f.P:av_an.label': 'AV-Beitrag, Ihr Anteil',
+ 'f.P:av_an.hint': '2,6 %, fifty-fifty mit dem Arbeitgeber.',
+ 'f.P:kv_allg.label': 'KV allgemeiner Beitragssatz',
+ 'f.P:kv_allg.hint': '§ 241 SGB V.',
+ 'f.P:kv_zus.label': 'KV durchschnittlicher Zusatzbeitrag',
+ 'f.P:kv_zus.hint': 'Wird vom BMG bekanntgegeben; jede Kasse tickt etwas anders — tragen Sie am besten Ihren eigenen Satz ein.',
+ 'f.P:pv_ges.label': 'PV Gesamtbeitragssatz',
+ 'f.P:pv_ges.hint': '§ 55 SGB XI. Ermäßigungen ab dem zweiten Kind rechnen wir hier nicht mit ein.',
+ 'f.P:pv_an.label': 'PV, Ihr Anteil',
+ 'f.P:pv_an.hint': 'In Sachsen etwas anders (2,3 %).',
+ 'f.P:pv_kl.label': 'PV-Zuschlag für Kinderlose',
+ 'f.P:pv_kl.hint': '§ 55 Abs. 3 SGB XI, allein vom Arbeitnehmer getragen.',
+ 'f.P:gfb.label': 'Grundfreibetrag (Ende Zone 1)',
+ 'f.P:gfb.hint': '§ 32a Abs. 1 EStG in der Fassung des Steuerfortentwicklungsgesetzes.',
+ 'f.P:e2.label': 'Ende Zone 2',
+ 'f.P:e2.hint': 'Grenzsteuersatz klettert von 14 % auf 23,97 %.',
+ 'f.P:e3.label': 'Ende Zone 3',
+ 'f.P:e3.hint': 'Grenzsteuersatz klettert von 23,97 % auf 42 %.',
+ 'f.P:e4.label': 'Beginn Zone 5 (Reichensteuer)',
+ 'f.P:e4.hint': 'Ab 277.826 € sind 45 % fällig.',
+ 'f.P:a2.label': 'Koeffizient a₂',
+ 'f.P:a2.hint': 'ESt = (a₂·y + b₂)·y mit y = (zvE − Grundfreibetrag)/10.000.',
+ 'f.P:b2.label': 'Koeffizient b₂',
+ 'f.P:a3.label': 'Koeffizient a₃',
+ 'f.P:a3.hint': 'ESt = (a₃·z + b₃)·z + c₃ mit z = (zvE − 17.799)/10.000.',
+ 'f.P:b3.label': 'Koeffizient b₃',
+ 'f.P:c3.label': 'Konstante c₃',
+ 'f.P:c4.label': 'Konstante c₄',
+ 'f.P:c4.hint': 'ESt = 0,42·zvE − c₄.',
+ 'f.P:c5.label': 'Konstante c₅',
+ 'f.P:c5.hint': 'ESt = 0,45·zvE − c₅.',
+ 'f.P:soli.label': 'Solidaritätszuschlag',
+ 'f.P:soli.hint': 'SolzG 1995.',
+ 'f.P:soli_fg.label': 'Soli-Freigrenze',
+ 'f.P:soli_fg.hint': '2026, Grundtarif, bezogen auf die festgesetzte ESt; beim Splitting doppelt so hoch. Plus eine Milderungszone obendrauf.',
+ 'f.P:soli_mz.label': 'Milderungszone Grenzbelastung',
+ 'f.P:soli_mz.hint': '§ 3 Abs. 2a SolzG.',
+ 'f.P:an_pausch.label': 'Arbeitnehmer-Pauschbetrag',
+ 'f.P:an_pausch.hint': '§ 9a S. 1 Nr. 1a EStG.',
+ 'f.P:sa_pausch.label': 'Sonderausgaben-Pauschbetrag',
+ 'f.P:sa_pausch.hint': '§ 10c EStG.',
+ 'f.P:kapst.label': 'Abgeltungsteuersatz',
+ 'f.P:kapst.hint': '§ 32d Abs. 1 EStG.',
+ 'f.P:tfs.label': 'Teilfreistellung Aktienfonds',
+ 'f.P:tfs.hint': '§ 20 Abs. 1 Nr. 3 i.V.m. § 20 InvStG, ab 50 % Aktienfondsanteil — ein netter Steuerbonus für ETF-Sparer!',
+ 'f.P:sparerpb.label': 'Sparer-Pauschbetrag',
+ 'f.P:sparerpb.hint': '§ 20 Abs. 9 EStG; beim Splitting verdoppelt. Fängt einen großen Batzen der Vorabpauschale ab — Details im Wasserfall-Diagramm.',
+ 'f.P:basiszins.label': 'Basiszins Vorabpauschale',
+ 'f.P:basiszins.hint': 'BMF-Schreiben vom 13.01.2026, § 18 Abs. 4 InvStG (2025: 2,53 %). Auf 0 setzen heißt: keine Vorabpauschale fällig.',
+ 'f.P:vp_faktor.label': 'Faktor für den Basisertrag',
+ 'f.P:vp_faktor.hint': '§ 18 Abs. 1 S. 1 InvStG.',
+ 'f.P:st_frei_q.label': 'steuerfrei § 3 Nr. 63 (Anteil BBG-RV)',
+ 'f.P:st_frei_q.hint': '8 % der BBG-RV = 8.112 € in 2026 — komplett steuerfrei!',
+ 'f.P:sv_frei_q.label': 'sozialabgabenfrei (Anteil BBG-RV)',
+ 'f.P:sv_frei_q.hint': '§ 1 Abs. 1 S. 1 Nr. 9 SvEV; 4 % = 4.056 € in 2026. Genau bis hierhin reicht auch Ihr Rechtsanspruch nach § 1a BetrAVG.',
+ 'f.P:zul_g1.label': 'Zulage Stufe 1 (je € Eigenbeitrag)',
+ 'f.P:zul_g1.hint': 'Altersvorsorgereformgesetz, seit Mai 2026 in Kraft, anwendbar ab 1.1.2027.',
+ 'f.P:zul_s1.label': 'Grenze Stufe 1',
+ 'f.P:zul_s1.hint': 'Bis 360 € Eigenbeitrag: 50 Cent obendrauf je €.',
+ 'f.P:zul_g2.label': 'Zulage Stufe 2 (je € Eigenbeitrag)',
+ 'f.P:zul_g2.hint': 'Von 361 bis 1.800 €: 25 Cent obendrauf je €.',
+ 'f.P:zul_s2.label': 'Grenze Stufe 2',
+ 'f.P:zul_s2.hint': 'Höchstbetrag für den geförderten Eigenbeitrag; macht maximal 540 € Grundzulage — geschenkt!',
+ 'f.P:kind_zul.label': 'Kinderzulage je Kind',
+ 'f.P:kind_zul.hint': '1 € je eingezahltem €, bis 300 € je Kind.',
+ 'f.P:av_max.label': 'Höchstbetrag Einzahlung p.a.',
+ 'f.P:av_max.hint': 'BMF-FAQ zur Reform der geförderten privaten Altersvorsorge, Stand 05.05.2026. Alles darüber läuft in eine Nebenschiene, die wie ein ganz normales Privatdepot besteuert wird — auch kein Beinbruch.',
+ 'f.P:av_sa_max.label': 'Höchstbetrag Sonderausgabenabzug § 10a',
+ 'f.P:av_sa_max.hint': 'MODELLANNAHME, Vertrauensgrad ca. 70 %. Eigenbeitrag bis 1.800 € plus Zulagen. Diese eine Zahl entscheidet, ob ein Kind Ihr AV-Depot noch attraktiver macht oder nicht.',
+ 'f.P:ertragsq.label': 'Ertragsanteil (Alter 67)',
+ 'f.P:ertragsq.hint': '§ 22 Nr. 1 S. 3 Buchst. a Doppelbuchst. bb EStG, für nicht geförderte Rententeile.',
+ 'f.P:halb.label': 'steuerpflichtiger Anteil des Unterschiedsbetrags',
+ 'f.P:halb.hint': '§ 20 Abs. 1 Nr. 6 S. 2 EStG analog (Vertrag über 12 Jahre, Auszahlung nach 62): nur der halbe Unterschiedsbetrag ist steuerpflichtig — ein echter Bonus! Vertrauensgrad ca. 80 %.',
+
+ /* ---------------- Rahmen, Fenstertitel, Kopf und Fuß ---------------- */
+ 'app.title': 'Altersvorsorge-Vergleich',
+ 'app.meta': 'Jetzt in nur 30 Sekunden schwarz auf weiß: bAV, Altersvorsorgedepot oder privates ETF-Depot — welche der drei Varianten holt bei exakt gleichem Nettoaufwand das Maximum für Sie heraus? Rechtsstand 2026, topaktuell und komplett kostenlos!',
+ 'hdr.title': 'Altersvorsorge‑Vergleich',
+ 'hdr.sub': 'Betriebliche Altersvorsorge, Altersvorsorgedepot und privates ETF‑Depot &mdash; endlich einmal <b>schonungslos fair</b> gegenübergestellt: gleicher Nettoaufwand, derselbe ETF, null Schönrechnerei. Rechtsstand 2026. Entdecken Sie in Sekunden, wo Ihr Geld am härtesten für Sie arbeitet!',
+ 'win.header': 'Altersvorsorge-Vergleich',
+ 'win.result': 'Ihr persönliches Ergebnis',
+ 'win.input': 'Ihre Angaben — schnell gemacht',
+ 'win.chart': 'Ihre Zahlen auf einen Blick',
+ 'win.extra': 'Für Profis: das Feintuning',
+ 'win.calc': 'Volle Transparenz: so rechnen wir',
+ 'win.share': 'Sichern & teilen',
+ 'win.min': 'Minimieren',
+ 'win.restore': 'Wiederherstellen',
+ 'win.n': function(p){ return 'Fenster ' + p.n; },
+ 'input.sub': 'Jede Änderung rechnen wir <b>sofort und in Echtzeit</b> komplett neu für Sie durch — kein Klick auf „Berechnen", kein Warten! Und falls Sie irgendwo unsicher sind: das <span class="qm" style="cursor:default">?</span> erklärt Ihnen jedes einzelne Feld in Sekunden.',
+ 'extra.sub': 'Gute Nachricht: Hier ist bereits alles optimal für Sie voreingestellt — Sie müssen nichts tun! Anfassen lohnt sich nur, wenn es bei Ihnen wirklich anders läuft. Dann aber richtig.',
+ 'calc.sub': 'Nichts zu verbergen: Für alle, die es ganz genau wissen wollen, legen wir hier jede einzelne Formel offen. Bitte prüfen Sie uns nach!',
+ 'share.sub': 'Ihre Daten gehören <b>ausschließlich Ihnen</b> und verlassen diesen Browser nie (<kbd>localStorage</kbd>). Kein Server, kein Tracking, keine Weitergabe, keine Ausrede — großes Ehrenwort!',
+ 'ui.share': 'Ergebnis-Link jetzt kopieren',
+ 'ui.export': 'Ergebnis dauerhaft sichern',
+ 'ui.import': 'Gespeichertes Ergebnis laden',
+ 'ui.reset': 'Frisch von vorn beginnen',
+ 'ui.pin.set': 'Diesen Stand als Bestwert merken',
+ 'ui.pin.clear': 'Bestwert wieder freigeben',
+ 'ui.lang': 'Sprache',
+ 'ui.lang.aria': 'Sprache wählen',
+ 'ui.lang.partial': 'nur teilweise übersetzt',
+ 'ui.lang.partialNote': 'Diese Sprache ist <b>teilweise übersetzt</b>: Oberfläche, Feldnamen, Tabellenköpfe und Diagrammlegenden sind startklar. Die langen Erläuterungen — die <span class="qm" style="cursor:default">?</span>-Texte, das Fazit und der Rechenweg — zeigen wir noch auf Deutsch. Die Gesetzestexte (BetrAVG, EStG, SGB V) bleiben ohnehin überall deutsch, anders gibt es sie amtlich nicht.',
+ 'sb.up': 'Rauf zu Ihrem Ergebnis',
+ 'footer.1': '<b>Wichtig und ehrlich: keine Steuer- oder Anlageberatung.</b> So gut unser Rechner ist — das persönliche Gespräch ersetzt er nicht, und das wollen wir auch gar nicht behaupten. Die Rechtslage 2026 zur reformierten privaten Altersvorsorge ist an einigen Stellen noch offen; wir verstecken das nicht, sondern legen die unsichersten Annahmen unter „Rechenweg → Belastbarkeit der Annahmen" komplett offen — und Sie dürfen jede einzelne davon selbst nachjustieren. So viel Transparenz bekommen Sie sonst nirgends!',
+ 'footer.2': 'Unser Rechenkern? Eins zu eins aus dem geprüften Excel-Modell <span class="pill">bAV-DYNO_vs_Altersvorsorgedepot_vs_ETF.xlsx</span> übernommen und an drei Testfällen bis auf Maschinengenauigkeit bestätigt — größte Abweichung 1,3·10<sup>&minus;14</sup>. Das ist der vierzehnte Nachkommastellenbereich. Genauer geht es auf diesem Planeten schlicht nicht!',
+
+ /* ---------------- Die drei Optionen ---------------- */
+ 'opt.bav.name': 'bAV (Entgeltumwandlung)',
+ 'opt.bav.short': 'bAV',
+ 'opt.bav.nom': 'Ihre betriebliche Altersvorsorge',
+ 'opt.bav.satz': 'Ihre betriebliche Altersvorsorge',
+ 'opt.bav.gen': 'der bAV',
+ 'opt.av.name': 'Altersvorsorgedepot',
+ 'opt.av.short': 'AV-Depot',
+ 'opt.av.nom': 'Ihr Altersvorsorgedepot',
+ 'opt.av.satz': 'Ihr Altersvorsorgedepot',
+ 'opt.av.gen': 'des Altersvorsorgedepots',
+ 'opt.priv.name': 'privates ETF-Depot',
+ 'opt.priv.short': 'privat',
+ 'opt.priv.nom': 'Ihr privates ETF-Depot',
+ 'opt.priv.satz': 'Ihr privates ETF-Depot',
+ 'opt.priv.gen': 'des privaten ETF-Depots',
+
+ /* ---------------- Kennzahlen ---------------- */
+ 'metric.monat.label': 'Monatliche Leistung',
+ 'metric.monat.unit': '€/Monat',
+ 'metric.monat.desc': 'Ihre konstante Monatszahlung über die gesamte Rentenzeit, in heutiger Kaufkraft. Die Zahl, die Sie am direktesten mit Ihrem heutigen Netto vergleichen können.',
+ 'metric.ertrag.label': 'Netto-Ertrag (Barwert)',
+ 'metric.ertrag.unit': '€',
+ 'metric.ertrag.desc': 'Was für Sie unterm Strich übrig bleibt, in heutiger Kaufkraft: Barwert aller Netto-Leistungen minus Barwert Ihres Aufwands.',
+ 'metric.irr.label': 'Interne Rendite',
+ 'metric.irr.unit': '% p.a.',
+ 'metric.irr.desc': 'Ihre Rendite auf den tatsächlich eingesetzten Netto-Betrag, nominal. Direkt vergleichbar mit der ETF-Bruttorendite — die Differenz zeigt, was Förderung und Abgaben Ihnen bringen oder kosten.',
+ 'metric.kapital.label': 'Kapital bei Rentenbeginn',
+ 'metric.kapital.unit': '€',
+ 'metric.kapital.desc': 'Vor Steuern und Sozialabgaben, nominal. Sieht oft beeindruckend aus, ist aber NICHT die entscheidende Zahl: die bAV liegt hier häufig vorn, verliert dann aber bei der Auszahlung wieder.',
+ 'metric.pa': ' p.a.',
+ 'metric.pp': ' Prozentpunkte',
+ 'metric.short.monat': 'Monat',
+ 'metric.short.ertrag': 'Ertrag',
+ 'metric.short.irr': 'IRR',
+ 'metric.short.kapital': 'Kapital',
+
+ /* ---------------- Eingabefelder, Rahmenwerk ---------------- */
+ 'unit.pct': '%',
+ 'unit.eur': '€',
+ 'unit.eurm': '€/Monat',
+ 'ui.hintFor': function(p){ return 'Erklärung zu: ' + p.label; },
+ 'ui.couple': '<span>⇅</span> Zwei Blickwinkel, ein Wert — clever gekoppelt! Sie ändern eine Zahl, die andere zieht blitzschnell nach. Bequemer geht es nicht.',
+ 'ui.cnt.legal': function(p){ return p.n + ' Rechengrößen'; },
+ 'ui.cnt.fields': function(p){ return p.n + ' Felder'; },
+ 'ui.legalNote': 'Alles gesetzlich verbrieft, mit Quelle zum Nachschlagen. Ehrlich gesagt: Hier müssen Sie nichts anpassen — außer der Gesetzgeber überrascht uns oder Ihre Kasse tanzt aus der Reihe.',
+ 'group.bav': 'Zuschuss und Auszahlungsformen im Detail',
+ 'group.person': 'Zeitachse, Ausstieg, Teilzeit',
+ 'group.steuer': 'Steuer, Veranlagung, Kinder',
+ 'group.markt': 'Kosten und Inflation',
+ 'group.ruhe': 'Ruhestand',
+ 'group.p_sv': 'Rechengrößen: Sozialversicherung 2026',
+ 'group.p_est': 'Rechengrößen: Einkommensteuertarif 2026 (§ 32a EStG)',
+ 'group.p_kap': 'Rechengrößen: Kapitalertrag- und Investmentsteuer',
+ 'group.p_bav': 'Rechengrößen: betriebliche und geförderte private Vorsorge',
+
+ /* ---------------- Live-Notizen an den Feldern ---------------- */
+ 'n.beitrag.ueber8': function(p, f){
+ return 'Über 8 % der Beitragsbemessungsgrenze RV (' + f.eur(p.v8) + ' im Jahr) — dieser Teil bringt '
+ + 'leider keinen Steuer- oder SV-Bonus mehr, er landet im Versicherungsmantel und zieht dort nur '
+ + 'die KV-Beitragspflicht nach sich.'; },
+ 'n.beitrag.ueber4': function(p, f){
+ return 'Über 4 % der Beitragsbemessungsgrenze RV (' + f.eur(p.v4) + ' im Jahr). Bis hierhin haben Sie '
+ + 'einen festen Rechtsanspruch nach § 1a BetrAVG — darüber braucht’s einfach noch das Okay Ihres '
+ + 'Arbeitgebers.'; },
+ 'n.agzus.gedeckelt': function(p, f){
+ return 'Gedeckelt bei ' + f.pct(p.quote, 1) + '. Ihr Arbeitgeber spart real ' + f.eur2(p.ersparnis)
+ + ' im Jahr — mehr geht hier nicht, solange „spitz gerechnet" eingestellt bleibt.'; },
+ 'n.agz_fix.fliesstNicht': function(p, f){
+ return 'Fließt leider noch nicht: Ihr Monatsbeitrag von ' + f.eur2(p.beitrag) + ' liegt unter der '
+ + 'Mindestschwelle von ' + f.eur2(p.schwelle) + ' (siehe Feld unter „Noch mehr Feintuning").'; },
+ 'n.agz_fix.ueber4': function(p, f){
+ return 'Der feste Zuschuss allein knackt schon den 4-%-Topf (' + f.eur(p.topf)
+ + ' im Jahr) um ' + f.eur(p.ueber) + '. Dieser Teil wäre bei Ihnen eigentlich beitragspflichtig — '
+ + 'das rechnen wir hier bewusst nicht gegen, macht die bAV also in diesem Punkt sogar etwas '
+ + 'besser, als sie streng genommen ist.'; },
+ 'n.agz_fix.verdraengung': function(p, f){
+ return 'Belegt zuerst den 4-%-Topf: von Ihrem eigenen Beitrag bleiben noch ' + f.eur(p.rest)
+ + ' sozialabgabenfrei übrig. Ihr Nettoaufwand steigt dadurch zwar etwas — der Zuschuss bleibt '
+ + 'trotzdem geschenktes Geld, er verschiebt nur, wo Ihre eigene Förderung ansetzt.'; },
+ 'n.agz_fix.ueber8': 'Zusammen mit Ihrem Eigenbeitrag geht’s über 8 % der BBG-RV — der Überhang bringt leider weder Steuer- noch Beitragsvorteil.',
+ 'n.agz_fix_min.knapp': function(p, f){
+ return 'Sie liegen nur ' + f.eur2(p.d) + ' über der Schwelle — knapp geschafft! Darunter fiele der '
+ + 'feste Zuschuss komplett weg: an genau dieser Stelle ist die Grenzrendite Ihres letzten '
+ + 'Beitragseuros besonders hoch.'; },
+ 'n.agz_fix_min.verfehlt': function(p, f){
+ return 'Schwelle noch nicht erreicht — nur ' + f.eur2(p.fehlt) + ' mehr im Monat lösen bereits '
+ + f.eur2(p.zuschuss) + ' Zuschuss aus. Das ist fast immer der lohnendste Euro im ganzen Modell — '
+ + 'unbedingt mitnehmen!'; },
+ 'n.teilkap.kosten': function(p, f){
+ return 'Kostet ' + (p.gewinn ? 'nichts — im Gegenteil, Sie sparen sogar: ' + p.dtxt : p.dtxt + ' ' + p.unit)
+ + ' gegenüber der reinen Rente. Grund: der Einmalbetrag wird im ersten Jahr voll versteuert '
+ + '(Grenzbelastung dort ' + f.pct(p.grenz, 1) + '), verzinst sich danach aber nur noch mit dem '
+ + 'Abgeltungsteuersatz statt mit der vollen Produktrendite.'; },
+ 'n.av_auszform.horizont': function(p, f){
+ return 'Über den Vergleichshorizont hinaus zahlt diese Rente noch ' + f.eur(p.rest)
+ + ' weiter — das zählen wir hier fair NICHT mit. Ein fester Horizont unterschätzt jede lebenslange '
+ + 'Rente systematisch: wer alt wird, macht hier das beste Geschäft!'; },
+
+ /* ---------------- Ergebniskarten ---------------- */
+ 'card.lead': 'Ihr Sieger',
+ 'card.unchanged': 'unverändert',
+ 'base.pinned': 'Δ gegenüber Ihrem gemerkten Vergleichswert',
+ 'base.delta': function(p){ return 'Δ ' + p.desc; },
+ 'base.none': 'Neugierig? Bewegen Sie einfach irgendeinen Regler — die Auswirkung erscheint hier auf der Stelle als Δ. Probieren Sie es aus, kaputtmachen können Sie nichts!',
+ 'base.desc.prev': 'vorheriger Stand',
+ 'base.desc.pinned': 'gemerkter Vergleichswert',
+ 'base.desc.change': function(p){ return 'vor der Änderung von „' + p.label + '"'; },
+ 'rank.swap': function(p, f){
+ return '<b>Die Kennzahlen sind sich hier uneinig — das kann passieren!</b> Nach Monatsleistung liegt '
+ + p.a + ' vor ' + p.b + ', nach Barwert des Netto-Ertrags ist es umgekehrt. '
+ + 'Grund: der Barwert zinst mit der Inflation ab (' + f.pct(p.infl, 2) + '), die Monatsleistung '
+ + 'verrentet mit dem Wiederanlagezins nach Steuern (' + f.pct(p.wiederanl, 2) + '). Je weiter beide '
+ + 'auseinanderliegen, desto attraktiver eine frühe Kapitalauszahlung. Welche Kennzahl für Sie zählt, '
+ + 'hängt einfach davon ab, ob Sie anlegen oder ausgeben würden — beim „Ausgeben"-Fall setzen Sie den '
+ + 'Wert bei „Kosten privates ETF-Depot" so, dass der Wiederanlagezins gegen null geht.'; },
+ 'warn.unreachable': 'Ambitioniert! Dieser Nettoaufwand übersteigt allerdings Ihr Gehalt — so viel geht beim besten Willen nicht. Kein Problem: Wir haben bereits automatisch das Maximum für Sie eingestellt, damit Sie nahtlos weitermachen können.',
+ 'warn.inactive': 'Kleiner Stolperstein: Nach Ihren Angaben sind Sie im ersten Jahr gar nicht mehr berufstätig — ohne Beschäftigung keine Entgeltumwandlung und damit leider auch kein Nettoaufwand, den wir für Sie zurückrechnen könnten. Ein kurzer Blick auf „Ausstieg aus dem Job" und „Ihr Alter heute" genügt, und schon läuft alles wieder!',
+
+ /* ---------------- Klartext-Fazit ---------------- */
+ 'verdict.lead': function(p){
+ return '<b>' + p.satz + '</b> macht bei Ihnen das Rennen mit ' + p.wert + ' — ' + p.d2 + ' mehr als ' + p.nom2
+ + (p.nom3 ? ' und ' + p.d3 + ' mehr als ' + p.nom3 : '') + '!'; },
+ 'verdict.pp': function(p){ return p.v + ' Prozentpunkte'; },
+ 'verdict.top': function(p, f){
+ return ' Der größte Einzelposten im Vorsprung ' + p.gen + ' gegenüber dem privaten ETF-Depot ist '
+ + '„' + p.label + '" — und zwar ' + (p.pro ? 'zu Ihren Gunsten' : 'zu Ihren Lasten') + ' ' + p.gen
+ + ', mit ' + f.eur(p.wert) + ' Barwert. Die komplette Aufschlüsselung finden Sie unter „Werttreiber".'; },
+ 'verdict.band': function(p, f){
+ return '<span class="band">Wie sicher ist das? Bei einer Bruttorendite von ' + f.pct(p.lo, 1)
+ + ' statt ' + f.pct(p.mid, 1) + ' wären es ' + p.vlo + ', bei ' + f.pct(p.hi, 1) + ' sogar ' + p.vhi
+ + ' — die Reihenfolge '
+ + (p.stabil ? 'bleibt in dieser Spanne stabil, Sie können sich also darauf verlassen.'
+ : '<b>kann sich in dieser Spanne umdrehen</b> — das Ergebnis ist hier also mit Vorsicht zu genießen.')
+ + '</span>'; },
+ 'demo.text': '<b>Noch sehen Sie nur unser Beispiel!</b> 40 Jahre alt, 75.000 € Jahresbrutto, 300 € Entgeltumwandlung im Monat, gesetzlich krankenversichert. Ihr eigenes Ergebnis ist nur wenige Sekunden entfernt: einfach unter „Ihre Angaben" Ihre Zahlen eintippen — dieser Hinweis verabschiedet sich dann ganz von allein.',
+
+ /* ---------------- Mitlaufende Leiste ---------------- */
+ 'sb.cap': function(p){ return p.label + ' · ' + p.unit + (p.kaufkraft ? ', heutige Kaufkraft' : ''); },
+ 'sb.aria': function(p){ return 'Ergebnis: ' + p.label; },
+
+ /* ---------------- Diagramme ---------------- */
+ 'tab.sens': 'Sensitivität',
+ 'tab.wf': 'Werttreiber',
+ 'tab.kap': 'Kapitalverlauf',
+ 'tab.zer': 'Monatszerlegung',
+ 'chart.error': function(p){ return 'Diagramm gerade nicht darstellbar: ' + p.msg; },
+ 'sens.readout': 'Gestrichelt: genau Ihr aktueller Wert. Die Ringe markieren die Schnittpunkte mit dem Privatdepot — dort kippt das Ergebnis! Einfach über die Kurve fahren oder tippen und jede Zahl live ablesen.',
+ 'sens.legendY': function(p){ return 'y: ' + p.label + ' (' + p.unit + ')'; },
+ 'sens.note': function(p){
+ return 'Der zuletzt bewegte Regler wird über seine ganze Spanne für Sie durchgerechnet — ' + p.n
+ + ' komplette Modellläufe! Aktuell dran: „' + p.label + '". '
+ + 'Bewegen Sie einfach einen anderen Regler, die Kurve zieht sofort mit.'; },
+ 'sens.noteNetto': function(p, f){
+ return ' Kleiner Hinweis: dieser Regler verändert auch Ihren Nettoaufwand (hier ' + f.eur2(p.lo) + ' bis '
+ + f.eur2(p.hi) + ' im Monat) und damit den Betrag, der in allen drei Optionen für Sie arbeitet. '
+ + 'Deshalb sind die drei Kurven bei jedem einzelnen x fair vergleichbar, das Niveau zwischen '
+ + 'verschiedenen x aber nicht direkt. Die Knicke liegen an den Beitragsbemessungsgrenzen ('
+ + f.eur(p.bbgkv) + ' für KV/PV, ' + f.eur(p.bbgrv) + ' für RV/AV) und an den Tarifeckwerten.'; },
+ 'wf.up': 'hebt Ihren Ertrag',
+ 'wf.down': 'senkt Ihren Ertrag',
+ 'wf.legend': 'Barwert des Netto-Ertrags, heutige Kaufkraft',
+ 'wf.check': function(p, f){
+ return 'Gegenprobe: ' + f.eur(p.start) + ' + ' + f.eur(p.summe) + ' = ' + f.eur(p.start + p.summe)
+ + ' (Soll ' + f.eur(p.ende) + ', Abweichung ' + f.nf2(p.start + p.summe - p.ende) + ' €).'; },
+ 'wf.note': 'Diese Zerlegung geht rechnerisch exakt auf — sie hängt aber <b>von der Reihenfolge ab</b>: die Effekte lassen sich nicht sauber trennen, jeder Balken zeigt seinen Beitrag <i>unter der Annahme</i> der darüberliegenden. Tippen Sie einen Balken an für die Herleitung.',
+ 'wf.barinfo': function(p){ return p.label + ': ' + p.note; },
+ 'wfb.vp.label': 'Wegfall der Vorabpauschale',
+ 'wfb.vp.note': 'Weder bAV noch Altersvorsorgedepot kennen die Vorabpauschale (§ 18 InvStG) — ein echter Pluspunkt! Gemessen als Privatdepot ohne minus mit Vorabpauschale. Der Balken kann auch mal negativ sein: die Vorabpauschale wird großteils vom Sparer-Pauschbetrag aufgefangen, zählt aber voll für die Kostenbasis — dann ist sie fürs Privatdepot unterm Strich sogar von Vorteil.',
+ 'wfb.zul.label': 'Zulagen und Sonderausgabenabzug',
+ 'wfb.zul.note': 'Geschenktes Geld nach dem neuen Zulagenmodell plus der Abzug nach § 10a EStG. Gemessen, indem wir beide Förderwege probeweise abschalten.',
+ 'wfb.arch.label': 'Besteuerungsarchitektur (Rest)',
+ 'wfb.arch.note': 'Tarifarbitrage t₀ − t₁ und alles Übrige. Als Restgröße bestimmt, damit die Rechnung exakt aufgeht.',
+ 'wfb.agz.label': 'Arbeitgeberzuschuss',
+ 'wfb.agz.note': 'Geschenktes Geld — der einzige echte strukturelle Vorteil der bAV, der nicht aus dem Steuerrecht kommt. Gemessen durch Abschalten des Zuschusses.',
+ 'wfb.tarif.label': 'Tarifarbitrage und Rest',
+ 'wfb.tarif.note': 'Grenzsteuersatz beim Einzahlen minus beim Auszahlen, plus alles Übrige. Als Restgröße bestimmt, damit die Rechnung exakt aufgeht. Der reine Steueraufschub allein bringt übrigens nichts: (1−t)(1+r)ⁿ = (1+r)ⁿ(1−t), die Reihenfolge der Multiplikation ist egal.',
+ 'wfb.kvpv.label': 'KV/PV auf Versorgungsbezüge',
+ 'wfb.kvpv.note': '§§ 229, 250 SGB V: den vollen Beitragssatz trägt der Rentner allein — hier lohnt sich ein zweiter Blick. Gemessen als Differenz zur Einstellung „privat versichert im Ruhestand".',
+ 'wfb.ep.label': 'Verlust an Entgeltpunkten',
+ 'wfb.ep.note': 'Die Entgeltumwandlung mindert das beitragspflichtige Entgelt und damit auch die gesetzliche Rente etwas. Wir rechnen das fair netto gegen.',
+ 'kap.rentbeg': 'Rentenbeginn',
+ 'kap.swap': 'Kapital → Rentenanspruch',
+ 'kap.legend': 'durchgezogen: gesamt &nbsp;·&nbsp; gestrichelt: frei verfügbar',
+ 'kap.readout': function(p, f){
+ return 'Am Rentenbeginn gebunden: bAV ' + f.eur(p.bavGeb) + ' von ' + f.eur(p.bav)
+ + ' · AV-Depot ' + f.eur(p.avGeb) + ' von ' + f.eur(p.av)
+ + ' · privates Depot ' + f.eur(0) + ' von ' + f.eur(p.priv)
+ + '. Die äquivalente Monatsleistung wird verbraucht, deshalb landet jede Option punktgenau bei null.'; },
+ 'kap.note': function(p, f){
+ return 'Kontostand im Produkt, in der Rentenphase zuzüglich der netto wieder angelegten Auszahlungen '
+ + '(' + f.pct(p.wiederanl, 2) + ' nach Steuern) und abzüglich der äquivalenten Monatsleistung, die '
+ + 'tatsächlich verbraucht wird. Deshalb läuft jede Option zielgenau auf null. Weil der Verbrauch nur '
+ + 'aus der Wiederanlage kommt und das Produktkapital im Produkt bleibt, wo es mit voller '
+ + 'Produktrendite vor Steuern weiterwächst, verlaufen die Kurven trotzdem nicht parallel. '
+ + '— Die gestrichelte Linie zeigt, was Sie jederzeit frei zur Verfügung haben: die bAV ist bis zum '
+ + 'Rentenbeginn komplett gebunden (§ 1b BetrAVG sichert nur die Unverfallbarkeit, nicht die '
+ + 'Verfügbarkeit), beim Altersvorsorgedepot ist eine Entnahme vor 65 förderschädlich und frei nur '
+ + 'der Überschuss über den Jahreshöchstbetrag, das Privatdepot dagegen ist jederzeit frei verfügbar '
+ + '— ein klarer Pluspunkt für alle, die flexibel bleiben wollen. '
+ + (p.verrentet ? 'Da Sie das Depot verrenten, geht auch hier das Kapital an den Anbieter — die '
+ + 'Kurve fällt entsprechend, obwohl dabei nichts verloren geht. ' : '')
+ + 'Und noch einmal ganz klar gesagt: die Kurven zeigen nur das Vermögen aus DIESER einen '
+ + 'Entscheidung, nicht Ihr gesamtes Vermögen.'; },
+ 'zer.netto': 'netto',
+ 'zer.tax': 'Steuer',
+ 'zer.kv': 'KV/PV',
+ 'zer.pension': 'Rente',
+ 'zer.legend': '<span><i style="background:#808080"></i>Steuer</span><span><i style="background:#800000"></i>KV/PV</span><span><i style="background:#800080"></i>entgangene gesetzliche Rente</span><span style="margin-left:auto">farbiger Sockel = das, was Ihnen bleibt</span>',
+ 'zer.readout': 'Alles als konstante Monatsleistung in heutiger Kaufkraft dargestellt. Weil die Verrentung linear läuft, addieren sich die Blöcke exakt.',
+ 'zer.note': function(p, f){
+ return 'Der Zeitraum ist für alle drei Optionen identisch, ganz fair. Eine Kapitalauszahlung wird nicht '
+ + 'einfach durch zwölf geteilt, sondern mit dem Wiederanlagezins nach Steuern (' + f.pct(p.wiederanl, 2)
+ + ' p.a.) auf denselben Zeitraum verrentet. Wer das Kapital lieber verkonsumiert statt anzulegen, '
+ + 'steht am Ende schlechter da.'; },
+
+ /* ---------------- So rechnen wir ---------------- */
+ 'det.h.bav': 'bAV',
+ 'det.h.av': 'AV-Depot',
+ 'det.h.priv': 'privat',
+ 'det.h.kennzahl': 'Kennzahl',
+ 'det.h.wert': 'Wert',
+ 'det.erg.netto': 'Summe eingezahlt aus dem Netto (nominal)',
+ 'det.erg.fremd': 'Geschenktes Geld (Zuschuss bzw. Zulagen)',
+ 'det.erg.kapital': 'Kapital bei Auszahlungsbeginn',
+ 'det.erg.brutto': 'Summe Bruttoauszahlungen',
+ 'det.erg.steuer': 'davon Einkommen-/Abgeltungsteuer',
+ 'det.erg.kvpv': 'davon Kranken- und Pflegeversicherung',
+ 'det.erg.rentenverlust': 'Verlust an gesetzlicher Rente (kumuliert)',
+ 'det.erg.nettoausz': 'Summe Netto-Auszahlungen (nominal)',
+ 'det.erg.bwausz': 'Barwert der Netto-Auszahlungen',
+ 'det.erg.bwaufw': 'Barwert des Nettoaufwands',
+ 'det.erg.ertrag': 'Barwert des Netto-Ertrags',
+ 'det.erg.verhaeltnis': 'Verhältnis Ertrag zu Aufwand',
+ 'det.erg.irr': 'Interne Rendite (nominal)',
+ 'det.erg.vorsprung': 'Ihr Vorsprung gegenüber dem Privatdepot',
+ 'det.mon.brutto': 'Bruttoleistung pro Monat',
+ 'det.mon.steuer': 'abzüglich Einkommen-/Abgeltungsteuer',
+ 'det.mon.kvpv': 'abzüglich Kranken- und Pflegeversicherung',
+ 'det.mon.ep': 'abzüglich Verlust an gesetzlicher Rente',
+ 'det.mon.netto': 'IHR NETTO PRO MONAT (heutige Kaufkraft)',
+ 'det.diag.beitrag': 'Bruttobeitrag bAV pro Monat',
+ 'det.diag.aufwand': 'Nettoaufwand pro Monat (erstes Jahr)',
+ 'det.diag.grenzsteuer': 'Grenzsteuersatz in der Ansparphase (erstes Jahr)',
+ 'det.diag.ersparnis': 'Ersparnisquote gesamt (Steuer + SV), erstes Jahr',
+ 'det.diag.svAG': 'tatsächliche SV-Ersparnis des Arbeitgebers',
+ 'det.diag.svAN': 'tatsächliche SV-Ersparnis des Arbeitnehmers',
+ 'det.diag.ngef': 'Anteil der bAV-Beiträge ohne Förderung (erstes Jahr)',
+ 'det.diag.aussch': 'Ausschöpfung Ihres Rechtsanspruchs (4 % BBG-RV)',
+ 'det.diag.agzVar': 'davon Arbeitgeberzuschuss: prozentual (erstes Jahr)',
+ 'det.diag.agzFix': 'davon Arbeitgeberzuschuss: fester Betrag (erstes Jahr)',
+ 'det.diag.agzFixUeber4': 'fester Zuschuss über dem 4-%-Topf (nicht als Beitragslast erfasst)',
+ 'det.diag.vbMonat': 'Versorgungsbezug pro Monat zu Auszahlungsbeginn',
+ 'det.diag.freibetrag': 'Freibetrag Versorgungsbezüge im selben Jahr',
+ 'det.diag.vbQuote': 'Verhältnis Versorgungsbezug zu Freibetrag',
+ 'det.diag.kapFreiKapital': 'beitragsfrei mögliches Kapital (Kapitalauszahlung)',
+ 'det.diag.kapFreiRente': 'beitragsfrei mögliches Kapital (lebenslange Rente)',
+ 'det.diag.memoRest': 'BONUS-MEMO: bAV-Rentenzahlungen nach dem Horizont',
+ 'det.diag.memoRestAv': 'BONUS-MEMO: Depotrente nach dem Horizont',
+ 'det.diag.wiederanl': 'Wiederanlagezins nach Steuern',
+ 'det.diag.kapstEff': 'effektive Abgeltungsteuer inkl. Soli/KiSt',
+ 'det.diag.bestAnteil': 'Besteuerungsanteil der gesetzlichen Rente',
+ 'det.warn.lead': 'Kleiner Hinweis: Sie liegen hier außerhalb des besonders begünstigten Bereichs: ',
+ 'det.warn.aussch': 'Über 100 % Ausschöpfung gibt es leider keinen Rechtsanspruch auf Entgeltumwandlung mehr. ',
+ 'det.warn.ngef': 'Ein spürbarer Teil der Beiträge bringt weder Steuer- noch SV-Vorteil — dieser Teil landet im Versicherungsmantel, ohne dass dem eine Gegenleistung außer der KV-Beitragspflicht gegenübersteht. ',
+ 'det.warn.vb': 'Der Versorgungsbezug übersteigt den Freibetrag hier deutlich; die Schutzwirkung des festen Freibetrags nimmt entsprechend mit 1/Kapital ab. ',
+ 'det.anspar.h.jahr': 'Jahr',
+ 'det.anspar.h.brutto': 'Brutto',
+ 'det.anspar.h.beitrag': 'bAV-Beitrag',
+ 'det.anspar.h.agzVar': 'AG-Zuschuss %',
+ 'det.anspar.h.agzFix': 'AG fest',
+ 'det.anspar.h.sv': 'SV-Erspar.',
+ 'det.anspar.h.st': 'Steuer-Erspar.',
+ 'det.anspar.h.netto': 'Nettoaufwand',
+ 'det.anspar.h.zul': 'Zulagen',
+ 'det.anspar.h.kbav': 'Kapital bAV',
+ 'det.anspar.h.kav': 'Kapital AV',
+ 'det.anspar.h.kpriv': 'Kapital privat',
+ 'det.row.year': function(p){ return p.jahr + ' (Alter ' + p.alter + ')'; },
+ 'det.ausz.h.jahr': 'Jahr',
+ 'det.ausz.h.bavBr': 'bAV brutto',
+ 'det.ausz.h.kvpv': 'KV/PV',
+ 'det.ausz.h.steuer': 'Steuer',
+ 'det.ausz.h.mind': 'Rentenminderung',
+ 'det.ausz.h.bavNet': 'bAV netto',
+ 'det.ausz.h.avBr': 'AV brutto',
+ 'det.ausz.h.avNet': 'AV netto',
+ 'det.ausz.h.privBr': 'privat brutto',
+ 'det.ausz.h.privNet': 'privat netto',
+ 'det.ann.intro': 'Die Reihenfolge hängt an Rechtsfragen, die 2026 noch nicht komplett geklärt sind. Die Zahlen in Klammern sind unsere ehrliche Einschätzung des Vertrauensgrads.',
+ 'det.ann.h.annahme': 'Annahme',
+ 'det.ann.h.vertrauen': 'Vertrauen',
+ 'det.ann.h.anmerkung': 'Anmerkung',
+ 'det.ann.r1.a': 'Rechengrößen SV 2026, § 32a-Tarif 2026',
+ 'det.ann.r1.c': 'SVBezGrV 2026, Steuerfortentwicklungsgesetz',
+ 'det.ann.r2.a': 'KV/PV-Pflicht auf Versorgungsbezüge',
+ 'det.ann.r2.c': '§§ 229, 250 SGB V',
+ 'det.ann.r3.a': 'Freibetrag § 226 Abs. 2 S. 2 SGB V (KV)',
+ 'det.ann.r3.c': 'unstreitig',
+ 'det.ann.r4.a': 'Freigrenze statt Freibetrag in der PV',
+ 'det.ann.r4.c': 'die häufigste Fehlerquelle in Ratgebertexten — hier machen wir es richtig',
+ 'det.ann.r5.a': 'Beitragsfreiheit der AV-Depot-Auszahlung',
+ 'det.ann.r5.c': 'keine Versorgungsbezüge',
+ 'det.ann.r6.a': 'halber Unterschiedsbetrag für nicht geförderte Schichten',
+ 'det.ann.r6.c': '§ 22 Nr. 5 S. 2 Buchst. b i.V.m. § 20 Abs. 1 Nr. 6 S. 2 EStG',
+ 'det.ann.r7.a': 'Zuschuss nur bis zur tatsächlichen AG-Ersparnis',
+ 'det.ann.r7.c': 'Gegenauffassung liest 15 % als reine Pauschale',
+ 'det.ann.r8.a': 'Sonderausgaben-Höchstbetrag 2.340 €',
+ 'det.ann.r8.c': 'MODELLANNAHME. Entscheidet, ob ein Kind den Wert des AV-Depots hebt oder senkt',
+ 'det.ann.r9.a': 'KVdR-Pflichtversicherung im Ruhestand unterstellt',
+ 'det.ann.r9.c': 'freiwillig Versicherte nicht gesondert geprüft',
+ 'det.ann.notmodelled': '<b>Nicht mit eingerechnet:</b> Abschläge bei vorzeitigem Rentenbezug, Wirkung der Entgeltumwandlung auf Kranken-, Arbeitslosen- und Elterngeld, Hinterbliebenenversorgung, Insolvenzsicherung (PSVaG), Portabilität bei Arbeitgeberwechsel, Kinderabschläge in der PV, Günstigerprüfung nach § 32d Abs. 6 EStG, Pfändungs- und Grundsicherungsschutz, Langlebigkeitsrisiko jenseits des Horizonts — der guten Übersicht halber.',
+ 'det.prinzip': '<p>Ein Vergleich der reinen <i>Bruttobeiträge</i> wäre unfair: Entgeltumwandlung kommt aus dem Brutto, privates Sparen aus dem Netto. Deshalb gleichen wir den <b>Nettoaufwand</b> an — so haben alle die gleichen Startchancen:</p>'
+ + '<p style="font-family:var(--mono);font-size:.82rem;background:var(--chip);padding:9px 11px;border-radius:9px">Nettoaufwand = Bruttobeitrag − Lohnsteuerersparnis − ersparter AN-Anteil zur Sozialversicherung</p>'
+ + '<p>Genau dieser Betrag wird in allen drei Optionen für Sie angelegt. Was bleibt, ist ein fairer Vergleich der <i>Förderarchitekturen</i> — nicht der Einzahlungshöhen.</p>'
+ + '<p><b>Steueraufschub allein bringt übrigens gar nichts:</b> (1−t)·(1+r)ⁿ = (1+r)ⁿ·(1−t). Die Reihenfolge der Multiplikation ist egal. Was wirklich zählt, sind vier Werttreiber:</p>'
+ + '<ol style="padding-left:1.2em;margin:.3em 0"><li>Tarifarbitrage t₀ − t₁</li>'
+ + '<li>Geschenktes Geld — Arbeitgeberzuschuss bzw. Zulagen</li>'
+ + '<li>steuerfreie Thesaurierung — keine Vorabpauschale</li>'
+ + '<li>neue Abgaben, die nur eine Option treffen — KV/PV auf Versorgungsbezüge</li></ol>'
+ + '<p>Punkt 4 ist der große Nachteil der bAV, Punkt 2 dafür ihr echter Trumpf. Die Rendite der bAV <b>sinkt streng mit der Beitragshöhe</b>, weil der Freibetrag ein fester Betrag ist und seine Schutzwirkung mit 1/K abnimmt — ein „optimaler" Beitrag gibt es dabei nicht, mehr ist hier nicht automatisch besser.</p>'
+ + '<p>Bei vorgegebenem Nettoaufwand rechnen wir den Bruttobeitrag ganz genau zurück: N(B) wächst stetig und streng monoton (dN/dB = 1 − Grenz-SV-Satz − Grenzsteuersatz > 0), wegen der Knicke bei 4 % und 8 % der BBG-RV lässt sich das aber nicht in einer Formel lösen — deshalb verfeinern wir 34-mal in Folge, bis wir unter einem Zehntelcent Genauigkeit liegen.</p>',
+ 'det.t.prinzip': 'So vergleichen wir fair',
+ 'det.t.erg': 'Ihr Ergebnis im Detail',
+ 'det.s.erg': 'Alle drei Optionen kosten Sie in der Ansparphase exakt denselben Betrag aus dem Netto — ganz fair.',
+ 'det.t.mon': 'Monatliche Leistung, aufgeschlüsselt',
+ 'det.s.mon': 'Alle Optionen über denselben Zeitraum verrentet, in heutiger Kaufkraft. Weil die Verrentung linear läuft, addieren sich die Zeilen exakt.',
+ 'det.t.diag': 'Diagnose',
+ 'det.s.diag': 'Woran es liegt — und wo bei Ihnen noch Luft nach oben ist.',
+ 'det.t.anspar': 'Ansparphase, Jahr für Jahr',
+ 'det.t.ausz': 'Auszahlungsphase, Jahr für Jahr',
+ 'det.t.ann': 'Wie belastbar unsere Annahmen sind',
+
+ /* ---------------- Speichern und weitergeben ---------------- */
+ 'msg.linkCopied': 'Link kopiert! Wer ihn öffnet, sieht genau Ihre Zahlen — läuft komplett ohne Server.',
+ 'msg.linkFailed': 'Kopieren hat nicht geklappt. Der Link steht jetzt in der Adresszeile für Sie bereit.',
+ 'msg.loaded': 'Geladen!',
+ 'msg.loadError': function(p){ return 'Die Datei ließ sich leider nicht lesen: ' + p.msg; },
+ 'msg.reset': 'Zurückgesetzt auf den Basisfall.',
+
+ /* ---------------- PWA ---------------- */
+ 'pwa.offline': '<b>Auch offline für Sie da!</b> Die App liegt jetzt im Browser-Cache und läuft auch ganz ohne Verbindung. Zum Installieren: auf dem iPhone „Teilen" → „Zum Home-Bildschirm", auf Android das Menü → „App installieren".',
+ 'pwa.installAsk': '<b>Als App installieren?</b> Dann liegt sie mit eigenem Symbol direkt auf Ihrem Startbildschirm und läuft offline — praktisch für zwischendurch! ',
+ 'pwa.installBtn': 'Jetzt installieren',
+ 'pwa.installed': '<b>Installiert!</b> Sie finden die App jetzt bei Ihren übrigen Apps.',
+ 'pwa.declined': 'Alles klar — die App läuft auch so bestens, und zwar offline.',
+ 'pwa.file': '<b>Sie haben die Datei direkt geöffnet</b> (<kbd>file://</kbd>). Alles rechnet, alles wird gespeichert. Nur zwei Kleinigkeiten fehlen: kein Symbol auf dem Startbildschirm und kein Offline-Cache — den bräuchten Sie hier aber auch gar nicht, die Datei liegt ja schon auf Ihrem Gerät. Für das volle App-Erlebnis: den Ordner auf einen beliebigen HTTPS-Webspace legen und von dort öffnen.'
+};
diff --git a/app/i18n.de.js b/app/i18n.de.js
index dcc7993..3377778 100644
--- a/app/i18n.de.js
+++ b/app/i18n.de.js
@@ -224,11 +224,9 @@ window.I18N_DE = {
'ui.pin.set': 'Als Referenz merken',
'ui.pin.clear': 'Referenz lösen',
'ui.lang': 'Sprache',
- 'ui.lang.de': 'Deutsch',
- 'ui.lang.en': 'Englisch',
- 'ui.lang.la': 'Latein',
- 'ui.lang.ja': 'Japanisch',
'ui.lang.aria': 'Sprache wählen',
+ 'ui.lang.partial': 'nur teilweise übersetzt',
+ 'ui.lang.partialNote': 'Diese Sprache ist <b>teilweise übersetzt</b>: Oberfläche, Feldnamen, Tabellenköpfe und Diagrammlegenden liegen vor. Die langen juristischen Erläuterungen — die <span class="qm" style="cursor:default">?</span>-Texte an den Feldern, das Fazit und der Rechenweg — erscheinen auf Deutsch. Die Fundstellen (BetrAVG, EStG, SGB V) sind ohnehin in jeder Sprache deutsch: amtlich gibt es sie nur so.',
'sb.up': 'Nach oben zum Ergebnis',
'footer.1': '<b>Keine Steuer- oder Anlageberatung.</b> Ein Modell ist kein Vertrag. Die Rechtslage 2026 zur reformierten privaten Altersvorsorge ist an mehreren Stellen noch nicht abschließend geklärt; die Annahmen mit dem geringsten Vertrauensgrad stehen unter „Rechenweg → Belastbarkeit der Annahmen“ und sind dort auch änderbar.',
'footer.2': 'Rechenkern eins zu eins portiert aus dem Excel-Modell <span class="pill">bAV-DYNO_vs_Altersvorsorgedepot_vs_ETF.xlsx</span> und gegen drei Testfälle auf Maschinengenauigkeit geprüft (größte relative Abweichung 1,3·10<sup>&minus;14</sup>).',
diff --git a/app/i18n.en.js b/app/i18n.en.js
index 5e70eb1..12eb412 100644
--- a/app/i18n.en.js
+++ b/app/i18n.en.js
@@ -223,11 +223,9 @@ window.I18N_EN = {
'ui.pin.set': 'Pin as reference',
'ui.pin.clear': 'Unpin reference',
'ui.lang': 'Language',
- 'ui.lang.de': 'German',
- 'ui.lang.en': 'English',
- 'ui.lang.la': 'Latin',
- 'ui.lang.ja': 'Japanese',
'ui.lang.aria': 'Choose language',
+ 'ui.lang.partial': 'partially translated only',
+ 'ui.lang.partialNote': 'This language is <b>partially translated</b>: interface, field names, table headers and chart legends are in place. The long legal explanations — the <span class="qm" style="cursor:default">?</span> texts on the fields, the verdict and the calculation — appear in German. The statutory citations (BetrAVG, EStG, SGB V) are German in every language anyway: officially they exist in no other form.',
'sb.up': 'Back up to the result',
'footer.1': '<b>Not tax or investment advice.</b> A model is not a contract. The 2026 legal position on reformed private retirement provision is not settled in several respects; the assumptions with the lowest confidence are listed under „How it is calculated → Robustness of the assumptions“ and can be changed there.',
'footer.2': 'Calculation core ported one-to-one from the Excel model <span class="pill">bAV-DYNO_vs_Altersvorsorgedepot_vs_ETF.xlsx</span> and checked against three test cases to machine precision (largest relative deviation 1.3·10<sup>&minus;14</sup>).',
diff --git a/app/i18n.eo.js b/app/i18n.eo.js
new file mode 100644
index 0000000..0ec390c
--- /dev/null
+++ b/app/i18n.eo.js
@@ -0,0 +1,584 @@
+/* =====================================================================
+ Esperanta vortaro — PLENA (459 ŝlosiloj).
+ La leĝcitaĵoj restas germanaj intence: ili estas la primaraj fontoj kaj
+ ne havas oficialan tradukon. „bAV“ = Entgeltumwandlung, entreprena
+ pensiprovizo el la kruda salajro; ekzakta esperanta termino ne ekzistas,
+ do la mallongigo restas. Same „Altersvorsorgedepot“ kaj
+ „Versorgungsbezüge“ restas propraj nomoj.
+ Vortfarado sekvas la regulan sistemon anstataŭ pruntoj: „kruda“ /
+ „neta“, „rento“ por la vivdaŭra pago, „depono“ por Depot.
+ ===================================================================== */
+window.I18N_EO = {
+ 'f.I:gehalt.label': 'Jara kruda salajro hodiaŭ',
+ 'f.I:beitrag.label': 'Monata kotizo bAV, kruda',
+ 'f.I:netto_ziel.label': 'Monata neta elspezo',
+ 'f.I:agzus.label': 'Aldono de la dunganto',
+ 'f.I:agz_fix.label': 'Aldona fiksa kontribuo',
+ 'f.I:agz_fix_dyn.label': 'Indeksigi la fiksan kontribuon',
+ 'f.I:agz_fix_dyn.o0': 'nominale konstanta',
+ 'f.I:agz_fix_dyn.o1': 'kun la salajro',
+ 'f.I:agzus_sv.label': 'Reĝimo de la aldono',
+ 'f.I:agzus_sv.o0': 'plena kotizo',
+ 'f.I:agzus_sv.o1': 'nur la senkotiza parto',
+ 'f.I:agzus_sv.o2': 'efektiva ŝparo',
+ 'f.I:dyn.label': 'Indeksigi la kotizon',
+ 'f.I:dyn.o1': 'kun la salajro',
+ 'f.I:dyn.o0': 'nominale konstanta',
+ 'f.I:rendite.label': 'Kruda rendimento de la ETF jare',
+ 'f.I:alter.label': 'Aĝo hodiaŭ',
+ 'f.I:alter.unit': 'jaroj',
+ 'f.I:rentbeg.label': 'Komenco de la elpago',
+ 'f.I:rentbeg.unit': 'jaroj',
+ 'f.I:kv_ruhe.label': 'Malsanasekuro en la emeriteco',
+ 'f.I:kv_ruhe.o1': 'leĝa',
+ 'f.I:kv_ruhe.o2': 'privata',
+ 'f.I:auszform.label': 'Elpago de la bAV',
+ 'f.I:auszform.o1': 'kapitalo',
+ 'f.I:auszform.o2': 'vivdaŭra rento',
+ 'f.I:teilkap.label': 'Altersvorsorgedepot: unufoja sumo komence',
+ 'f.I:av_auszform.label': 'Altersvorsorgedepot: la resto',
+ 'f.I:av_auszform.o1': 'elpagoplano',
+ 'f.I:av_auszform.o2': 'vivdaŭra rento',
+ 'f.I:agz_fix_min.label': 'Minimuma propra kotizo por la fiksa kontribuo',
+ 'f.I:rentfak_av.label': 'Renta faktoro de la Altersvorsorgedepot',
+ 'f.I:rentfak_av.unit': '€ po 10.000 €',
+ 'f.I:rentdyn_av.label': 'Kresko de la depona rento jare',
+ 'f.I:rentfak.label': 'Renta faktoro bAV',
+ 'f.I:rentfak.unit': '€ po 10.000 €',
+ 'f.I:rentdyn.label': 'Kresko de la bAV-rento jare',
+ 'f.I:fuenftel.label': 'Kontroli la kvinonan regulon',
+ 'f.I:fuenftel.o0': 'ne (singarde)',
+ 'f.I:fuenftel.o1': 'jes',
+ 'f.I:planende.label': 'Komparhorizonto ĝis la aĝo',
+ 'f.I:planende.unit': 'jaroj',
+ 'f.I:ausscheid.label': 'Eliro el la laboro',
+ 'f.I:ausscheid.unit': 'jaroj',
+ 'f.I:tzalter.label': 'Parttempo ekde la aĝo',
+ 'f.I:tzalter.unit': 'jaroj',
+ 'f.I:tzfaktor.label': 'Parttempa faktoro',
+ 'f.I:gsteig.label': 'Salajrokresko jare',
+ 'f.I:stkl.label': 'Impostado',
+ 'f.I:stkl.o1': 'unuope',
+ 'f.I:stkl.o3': 'kune (duonigo)',
+ 'f.I:partner.label': 'imposteble enspezo de la partnero',
+ 'f.I:kist.label': 'Kvoto de la eklezia imposto',
+ 'f.I:tarifanp.label': 'Adapto de la tarifaj limoj jare',
+ 'f.I:kinder.label': 'Nombro da infanoj',
+ 'f.I:kind_jahre.label': 'Jaroj kun infana aldono',
+ 'f.I:kind_jahre.unit': 'jaroj',
+ 'f.I:kinderlos.label': 'Seninfana (aldono al la flegasekuro)',
+ 'f.I:kinderlos.o0': 'ne',
+ 'f.I:kinderlos.o1': 'jes',
+ 'f.I:k_bav.label': 'Kostoj de la bAV-produkto jare',
+ 'f.I:k_av.label': 'Kostoj de la Altersvorsorgedepot jare',
+ 'f.I:k_priv.label': 'Kostoj de la privata ETF-depono jare',
+ 'f.I:infl.label': 'Inflacio jare',
+ 'f.I:sonst_zve.label': 'alia imposteble enspezo en la emeriteco',
+ 'f.I:rente_br.label': 'leĝa kruda pensio jare',
+ 'f.P:bbg_rv.label': 'Kotizolimo de la pensiasekuro (jara)',
+ 'f.P:bbg_kv.label': 'Kotizolimo de la malsan- kaj flegasekuro',
+ 'f.P:bezug.label': 'Bezugsgröße (monata)',
+ 'f.P:de_rv.label': 'Meza salajro (RV)',
+ 'f.P:rw.label': 'Nuna valoro de la pensia punkto',
+ 'f.P:rw.unit': '€',
+ 'f.P:rv_an.label': 'Pensia kotizo, parto de la dungito',
+ 'f.P:av_an.label': 'Senlaboreca kotizo, parto de la dungito',
+ 'f.P:kv_allg.label': 'Ĝenerala kvoto de la malsanasekuro',
+ 'f.P:kv_zus.label': 'Meza kroma kotizo de la malsanasekuro',
+ 'f.P:pv_ges.label': 'Tuta kvoto de la flegasekuro',
+ 'f.P:pv_an.label': 'Flegasekuro, parto de la dungito',
+ 'f.P:pv_kl.label': 'Flegasekuro, aldono por seninfanuloj',
+ 'f.P:gfb.label': 'Baza sensumo (fino de zono 1)',
+ 'f.P:e2.label': 'Fino de zono 2',
+ 'f.P:e3.label': 'Fino de zono 3',
+ 'f.P:e4.label': 'Komenco de zono 5 (imposto por riĉuloj)',
+ 'f.P:a2.label': 'Koeficiento a₂',
+ 'f.P:b2.label': 'Koeficiento b₂',
+ 'f.P:a3.label': 'Koeficiento a₃',
+ 'f.P:b3.label': 'Koeficiento b₃',
+ 'f.P:c3.label': 'Konstanto c₃',
+ 'f.P:c4.label': 'Konstanto c₄',
+ 'f.P:c5.label': 'Konstanto c₅',
+ 'f.P:soli.label': 'Solidareca aldonimposto',
+ 'f.P:soli_fg.label': 'Sensuma limo de la aldonimposto',
+ 'f.P:soli_mz.label': 'Marĝena ŝarĝo de la mildiga zono',
+ 'f.P:an_pausch.label': 'Forfeta sensumo por dungitoj',
+ 'f.P:sa_pausch.label': 'Forfeta sensumo por specialaj elspezoj',
+ 'f.P:kapst.label': 'Kvoto de la kapitalimposto',
+ 'f.P:tfs.label': 'Parta sensumo por akciaj fondusoj',
+ 'f.P:sparerpb.label': 'Forfeta sensumo por ŝparantoj',
+ 'f.P:basiszins.label': 'Baza interezo de la Vorabpauschale',
+ 'f.P:vp_faktor.label': 'Faktoro de la baza rendimento',
+ 'f.P:st_frei_q.label': 'senimposta § 3 Nr. 63 (parto de BBG-RV)',
+ 'f.P:sv_frei_q.label': 'senkotiza (parto de BBG-RV)',
+ 'f.P:zul_g1.label': 'Aldono, ŝtupo 1 (po € propra kotizo)',
+ 'f.P:zul_s1.label': 'Limo de la ŝtupo 1',
+ 'f.P:zul_g2.label': 'Aldono, ŝtupo 2 (po € propra kotizo)',
+ 'f.P:zul_s2.label': 'Limo de la ŝtupo 2',
+ 'f.P:kind_zul.label': 'Infana aldono po infano',
+ 'f.P:av_max.label': 'Maksimuma enpago jare',
+ 'f.P:av_sa_max.label': 'Maksimuma dedukto laŭ § 10a',
+ 'f.P:ertragsq.label': 'Rendimenta parto (aĝo 67)',
+ 'f.P:halb.label': 'imposteble parto de la diferenca sumo',
+
+ /* ---------------- Kadro, fenestrotitoloj ---------------- */
+ 'app.title': 'Komparo de pensiprovizoj',
+ 'hdr.title': 'Komparo de pensiprovizoj',
+ 'win.header': 'Komparo de pensiprovizoj',
+ 'win.result': 'Rezulto',
+ 'win.input': 'Viaj indikoj',
+ 'win.chart': 'Diagramoj',
+ 'win.extra': 'Pliaj indikoj',
+ 'win.calc': 'Kalkulvojo',
+ 'win.share': 'Konservi kaj transdoni',
+ 'win.min': 'Minimumigi',
+ 'win.restore': 'Restarigi',
+ 'win.n': function(p){ return 'Fenestro ' + p.n; },
+ 'ui.share': 'Kopii ligilon kun miaj nombroj',
+ 'ui.export': 'Konservi kiel dosieron',
+ 'ui.import': 'Ŝargi dosieron',
+ 'ui.reset': 'Ĉion restarigi',
+ 'ui.pin.set': 'Memori kiel referencon',
+ 'ui.pin.clear': 'Forigi la referencon',
+ 'ui.lang': 'Lingvo',
+ 'ui.lang.aria': 'Elekti lingvon',
+ 'ui.lang.partial': 'nur parte tradukita',
+ 'ui.lang.partialNote': 'Ĉi tiu lingvo estas <b>parte tradukita</b>: la fasado, la kampnomoj, la tabelkapoj kaj la diagramklarigoj ekzistas. La longaj juraj klarigoj — la tekstoj sub <span class="qm" style="cursor:default">?</span> ĉe la kampoj, la konkludo kaj la kalkulvojo — aperas germane. La leĝcitaĵoj (BetrAVG, EStG, SGB V) estas germanaj en ĉiu lingvo: oficiale ili ekzistas nur tiel.',
+ 'sb.up': 'Supren al la rezulto',
+
+ /* ---------------- La tri ebloj ---------------- */
+ 'opt.bav.name': 'bAV (salajrokonverto)',
+ 'opt.bav.short': 'bAV',
+ 'opt.bav.nom': 'la entreprena pensiprovizo',
+ 'opt.bav.satz': 'La entreprena pensiprovizo',
+ 'opt.bav.gen': 'de la bAV',
+ 'opt.av.name': 'Altersvorsorgedepot',
+ 'opt.av.short': 'AV-depono',
+ 'opt.av.nom': 'la Altersvorsorgedepot',
+ 'opt.av.satz': 'La Altersvorsorgedepot',
+ 'opt.av.gen': 'de la Altersvorsorgedepot',
+ 'opt.priv.name': 'privata ETF-depono',
+ 'opt.priv.short': 'privata',
+ 'opt.priv.nom': 'la privata ETF-depono',
+ 'opt.priv.satz': 'La privata ETF-depono',
+ 'opt.priv.gen': 'de la privata ETF-depono',
+
+ /* ---------------- Indikiloj ---------------- */
+ 'metric.monat.label': 'Monata pago',
+ 'metric.monat.unit': '€/monato',
+ 'metric.ertrag.label': 'Neta gajno (nuna valoro)',
+ 'metric.ertrag.unit': '€',
+ 'metric.irr.label': 'Interna rendimento',
+ 'metric.irr.unit': '% jare',
+ 'metric.kapital.label': 'Kapitalo ĉe la emeritiĝo',
+ 'metric.kapital.unit': '€',
+ 'metric.pa': ' jare',
+ 'metric.pp': ' procentpunktoj',
+ 'metric.short.monat': 'Monato',
+ 'metric.short.ertrag': 'Gajno',
+ 'metric.short.irr': 'IRR',
+ 'metric.short.kapital': 'Kapitalo',
+
+ /* ---------------- Enigkampoj, kadro ---------------- */
+ 'unit.pct': '%',
+ 'unit.eur': '€',
+ 'unit.eurm': '€/monato',
+ 'ui.hintFor': function(p){ return 'Klarigo pri: ' + p.label; },
+ 'ui.cnt.legal': function(p){ return p.n + ' kalkulaj grandoj'; },
+ 'ui.cnt.fields': function(p){ return p.n + ' kampoj'; },
+ 'group.bav': 'Aldono kaj elpagoformoj detale',
+ 'group.person': 'Tempakso, eliro, parttempo',
+ 'group.steuer': 'Imposto, impostado, infanoj',
+ 'group.markt': 'Kostoj kaj inflacio',
+ 'group.ruhe': 'Emeriteco',
+ 'group.p_sv': 'Kalkulaj grandoj: socialasekuro 2026',
+ 'group.p_est': 'Kalkulaj grandoj: enspezimposta tarifo 2026 (§ 32a EStG)',
+ 'group.p_kap': 'Kalkulaj grandoj: kapital- kaj fondusimposto',
+ 'group.p_bav': 'Kalkulaj grandoj: entreprena kaj subvenciata privata provizo',
+
+ /* ---------------- Rezultkartoj ---------------- */
+ 'card.lead': 'antaŭe',
+ 'card.unchanged': 'neŝanĝita',
+ 'base.pinned': 'Δ kompare al la memorita stato',
+ 'base.delta': function(p){ return 'Δ ' + p.desc; },
+ 'base.none': 'Movu ŝovilon — la ŝanĝo aperos ĉi tie kiel Δ.',
+ 'base.desc.prev': 'antaŭa stato',
+ 'base.desc.pinned': 'memorita stato',
+ 'base.desc.change': function(p){ return 'antaŭ la ŝanĝo de „' + p.label + '“'; },
+ 'verdict.pp': function(p){ return p.v + ' procentpunktoj'; },
+
+ /* ---------------- Kuranta strio ---------------- */
+ 'sb.cap': function(p){ return p.label + ' · ' + p.unit + (p.kaufkraft ? ', hodiaŭa aĉetpovo' : ''); },
+ 'sb.aria': function(p){ return 'Rezulto: ' + p.label; },
+
+ /* ---------------- Diagramoj ---------------- */
+ 'tab.sens': 'Sentemo',
+ 'tab.wf': 'Valorpelantoj',
+ 'tab.kap': 'Kapitalkurbo',
+ 'tab.zer': 'Monata malkomponado',
+ 'chart.error': function(p){ return 'Diagramo ne prezentebla: ' + p.msg; },
+ 'sens.legendY': function(p){ return 'y: ' + p.label + ' (' + p.unit + ')'; },
+ 'wf.up': 'levas la gajnon',
+ 'wf.down': 'malaltigas la gajnon',
+ 'wf.legend': 'Nuna valoro de la neta gajno, hodiaŭa aĉetpovo',
+ 'wf.barinfo': function(p){ return p.label + ': ' + p.note; },
+ 'wfb.vp.label': 'Malapero de la Vorabpauschale',
+ 'wfb.zul.label': 'Aldonoj kaj dedukto de specialaj elspezoj',
+ 'wfb.arch.label': 'Imposta arkitekturo (resto)',
+ 'wfb.agz.label': 'Aldono de la dunganto',
+ 'wfb.tarif.label': 'Tarifa arbitraĝo kaj resto',
+ 'wfb.kvpv.label': 'Malsan-/flegasekuro sur Versorgungsbezüge',
+ 'wfb.ep.label': 'Perdo de pensiaj punktoj',
+ 'kap.rentbeg': 'Komenco de la pensio',
+ 'kap.swap': 'Kapitalo → renta rajto',
+ 'kap.legend': 'plena linio: entute &nbsp;·&nbsp; streketita: libere disponebla',
+ 'zer.netto': 'neta',
+ 'zer.tax': 'imposto',
+ 'zer.kv': 'malsan-/flegasek.',
+ 'zer.pension': 'pensio',
+ 'zer.legend': '<span><i style="background:#808080"></i>imposto</span><span><i style="background:#800000"></i>malsan-/flegasek.</span><span><i style="background:#800080"></i>perdita leĝa pensio</span><span style="margin-left:auto">kolora soklo = tio, kio restas</span>',
+
+ /* ---------------- Kalkulvojo ---------------- */
+ 'det.h.bav': 'bAV',
+ 'det.h.av': 'AV-depono',
+ 'det.h.priv': 'privata',
+ 'det.h.kennzahl': 'Indikilo',
+ 'det.h.wert': 'Valoro',
+ 'det.erg.netto': 'Sumo enpagita el la neto (nominale)',
+ 'det.erg.fremd': 'Fremda mono (aldono aŭ subvencioj)',
+ 'det.erg.kapital': 'Kapitalo ĉe la komenco de la elpago',
+ 'det.erg.brutto': 'Sumo de la krudaj elpagoj',
+ 'det.erg.steuer': 'el tio enspez-/kapitalimposto',
+ 'det.erg.kvpv': 'el tio malsan- kaj flegasekuro',
+ 'det.erg.rentenverlust': 'Perdo de leĝa pensio (kumulita)',
+ 'det.erg.nettoausz': 'Sumo de la netaj elpagoj (nominale)',
+ 'det.erg.bwausz': 'Nuna valoro de la netaj elpagoj',
+ 'det.erg.bwaufw': 'Nuna valoro de la neta elspezo',
+ 'det.erg.ertrag': 'Nuna valoro de la neta gajno',
+ 'det.erg.verhaeltnis': 'Rilato inter gajno kaj elspezo',
+ 'det.erg.irr': 'Interna rendimento (nominala)',
+ 'det.erg.vorsprung': 'Avantaĝo kontraŭ la privata depono',
+ 'det.mon.brutto': 'Kruda pago po monato',
+ 'det.mon.steuer': 'minus enspez-/kapitalimposto',
+ 'det.mon.kvpv': 'minus malsan- kaj flegasekuro',
+ 'det.mon.ep': 'minus perdo de leĝa pensio',
+ 'det.mon.netto': 'NETO PO MONATO (hodiaŭa aĉetpovo)',
+ 'det.diag.beitrag': 'Kruda kotizo bAV po monato',
+ 'det.diag.aufwand': 'Neta elspezo po monato (unua jaro)',
+ 'det.diag.grenzsteuer': 'Marĝena impostkvoto en la ŝparfazo (unua jaro)',
+ 'det.diag.ersparnis': 'Tuta ŝparkvoto (imposto + kotizoj), unua jaro',
+ 'det.diag.svAG': 'efektiva kotizoŝparo de la dunganto',
+ 'det.diag.svAN': 'efektiva kotizoŝparo de la dungito',
+ 'det.diag.ngef': 'Parto de la bAV-kotizoj sen subvencio (unua jaro)',
+ 'det.diag.aussch': 'Uzo de la leĝa rajto (4 % de BBG-RV)',
+ 'det.diag.agzVar': 'el tio aldono de la dunganto: procenta (unua jaro)',
+ 'det.diag.agzFix': 'el tio aldono de la dunganto: fiksa sumo (unua jaro)',
+ 'det.diag.agzFixUeber4': 'fiksa aldono super la 4-%-a poto (ne kalkulita kiel kotizoŝarĝo)',
+ 'det.diag.vbMonat': 'Versorgungsbezug po monato ĉe la komenco de la elpago',
+ 'det.diag.freibetrag': 'Sensumo por Versorgungsbezüge en la sama jaro',
+ 'det.diag.vbQuote': 'Rilato de Versorgungsbezug al la sensumo',
+ 'det.diag.kapFreiKapital': 'senkotize ebla kapitalo (kapitala elpago)',
+ 'det.diag.kapFreiRente': 'senkotize ebla kapitalo (vivdaŭra rento)',
+ 'det.diag.memoRest': 'NOTO: bAV-rentopagoj post la horizonto',
+ 'det.diag.memoRestAv': 'NOTO: depona rento post la horizonto',
+ 'det.diag.wiederanl': 'Reinvesta interezo post impostoj',
+ 'det.diag.kapstEff': 'efektiva kapitalimposto inkluzive de aldonimposto kaj eklezia imposto',
+ 'det.diag.bestAnteil': 'Imposteble parto de la leĝa pensio',
+ 'det.anspar.h.jahr': 'Jaro',
+ 'det.anspar.h.brutto': 'Kruda',
+ 'det.anspar.h.beitrag': 'bAV-kotizo',
+ 'det.anspar.h.agzVar': 'Aldono %',
+ 'det.anspar.h.agzFix': 'Aldono fiksa',
+ 'det.anspar.h.sv': 'Kotizoŝparo',
+ 'det.anspar.h.st': 'Impostŝparo',
+ 'det.anspar.h.netto': 'Neta elspezo',
+ 'det.anspar.h.zul': 'Subvencioj',
+ 'det.anspar.h.kbav': 'Kapitalo bAV',
+ 'det.anspar.h.kav': 'Kapitalo AV',
+ 'det.anspar.h.kpriv': 'Kapitalo privata',
+ 'det.row.year': function(p){ return p.jahr + ' (aĝo ' + p.alter + ')'; },
+ 'det.ausz.h.jahr': 'Jaro',
+ 'det.ausz.h.bavBr': 'bAV kruda',
+ 'det.ausz.h.kvpv': 'malsan-/flegasek.',
+ 'det.ausz.h.steuer': 'Imposto',
+ 'det.ausz.h.mind': 'Pensiomalpliigo',
+ 'det.ausz.h.bavNet': 'bAV neta',
+ 'det.ausz.h.avBr': 'AV kruda',
+ 'det.ausz.h.avNet': 'AV neta',
+ 'det.ausz.h.privBr': 'privata kruda',
+ 'det.ausz.h.privNet': 'privata neta',
+ 'det.ann.h.annahme': 'Supozo',
+ 'det.ann.h.vertrauen': 'Fido',
+ 'det.ann.h.anmerkung': 'Rimarko',
+ 'det.ann.r1.a': 'Kalkulaj grandoj de la socialasekuro 2026, tarifo § 32a 2026',
+ 'det.ann.r1.c': 'SVBezGrV 2026, Steuerfortentwicklungsgesetz',
+ 'det.ann.r2.a': 'Kotizodevo de malsan-/flegasekuro sur Versorgungsbezüge',
+ 'det.ann.r2.c': '§§ 229, 250 SGB V',
+ 'det.ann.r3.a': 'Sensumo § 226 Abs. 2 S. 2 SGB V (malsanasekuro)',
+ 'det.ann.r3.c': 'nekontestata',
+ 'det.ann.r4.a': 'Sojlo anstataŭ sensumo en la flegasekuro',
+ 'det.ann.r4.c': 'la plej ofta erarfonto en konsilaj tekstoj',
+ 'det.ann.r5.a': 'Senkotizeco de la elpago el la AV-depono',
+ 'det.ann.r5.c': 'ne temas pri Versorgungsbezüge',
+ 'det.ann.r6.a': 'Duono de la diferenca sumo por nesubvenciataj tavoloj',
+ 'det.ann.r6.c': '§ 22 Nr. 5 S. 2 Buchst. b i.V.m. § 20 Abs. 1 Nr. 6 S. 2 EStG',
+ 'det.ann.r7.a': 'Aldono nur ĝis la efektiva ŝparo de la dunganto',
+ 'det.ann.r7.c': 'la kontraŭa opinio legas la 15 % kiel puran forfeton',
+ 'det.ann.r8.a': 'Maksimumo por specialaj elspezoj 2.340 €',
+ 'det.ann.r8.c': 'SUPOZO DE LA MODELO. Decidas, ĉu infano levas aŭ malaltigas la valoron de la AV-depono',
+ 'det.ann.r9.a': 'Supozata deviga KVdR-asekuro en la emeriteco',
+ 'det.ann.r9.c': 'memvole asekuritaj ne kontrolitaj',
+ 'det.t.prinzip': 'La komparprincipo',
+ 'det.t.erg': 'Rezulto detale',
+ 'det.t.mon': 'Monata pago, malkomponita',
+ 'det.t.diag': 'Diagnozo',
+ 'det.t.anspar': 'Ŝparfazo, jaron post jaro',
+ 'det.t.ausz': 'Elpagofazo, jaron post jaro',
+ 'det.t.ann': 'Fidindeco de la supozoj',
+
+ /* ---------------- Konservi kaj transdoni ---------------- */
+ 'msg.loaded': 'Ŝargita.',
+ 'msg.loadError': function(p){ return 'La dosiero ne legeblis: ' + p.msg; },
+ 'msg.reset': 'Restarigita al la baza kazo.',
+
+ /* ---------------- PWA ---------------- */
+ 'pwa.installBtn': 'Instali',
+ 'pwa.installed': '<b>Instalita.</b> Vi trovos la aplikaĵon nun inter viaj ceteraj aplikaĵoj.',
+
+ /* ---------------- Klarigoj ĉe la kampoj (?) ---------------- */
+ 'f.I:gehalt.hint': 'Sen unufojaj pagoj, eventuale kun proporcia parto de la 13-a salajro. Difinas vian marĝenan impostkvoton kaj ĉu vi superas la kotizolimojn.',
+ 'f.I:beitrag.hint': 'Kruda salajrokonverto laŭ § 1a BetrAVG. Leĝa rajto ekzistas nur ĝis 4 % de la kotizolimo RV; super tio necesas la konsento de la dunganto.',
+ 'f.I:netto_ziel.hint': 'La sumo, per kiu via disponebla enspezo malkreskas en la unua jaro — la efektive rezignita konsumo kaj tial la ekonomie ĝusta decida grando. Ĝuste tiu sumo estas investata en ĉiuj tri ebloj; tio estas la kondiĉo por justa komparo. Ĝi rilatas unusignife al la kruda kotizo super ĝi: N(B) = B − ŝparo de socialasekuro − ŝparo de imposto estas strikte monotone kreskanta, do inversigebla. Fermforme tio ne eblas pro la faldiĝoj ĉe la kotizolimoj kaj la tarifaj limoj, tial 34 duonigoj — precizeco sub dekono de cendo.',
+ 'f.I:agzus.hint': 'Leĝa minimumo 15 % (§ 1a Abs. 1a BetrAVG); multaj dungantoj pagas pli. Rentabla ekvilibro kontraŭ la privata depono proksimume tie, kie (1+z)·(1−0,211) ≈ 1, do z ≈ 26,7 % — kontrolebla per la sentemkurbo. En la reĝimo „efektiva ŝparo“ tiu valoro ofte tute ne atingeblas, ĉar la aldono antaŭe saturiĝas.',
+ 'f.I:agz_fix.hint': 'Sumo-sendependa fiksa aldono el tarifa kontrakto aŭ entrepreza interkonsento — kutima ĉe Deutsche Bahn kaj en multaj tarifsistemoj, tie krome al la 15 % laŭ § 1a Abs. 1a BetrAVG. Ĝi estas dunganto-financita donaco laŭ § 3 Nr. 63 EStG kaj plenigas la 8-%-an poton same kiel la 4-%-an sen-kotizecon (§ 1 Abs. 1 S. 1 Nr. 9 SvEV) PRIORITATE: via propra konverto estas tiugrade forpuŝita kaj pli multekosta. Ekonomie ĝi estas bazo, ne levilo: la marĝenan rendimenton de via sekva kotiza eŭro ĝi ne ŝanĝas (∂²gajno/∂agz_fix∂kotizo ≤ 0, per la forpuŝo ĝi eĉ povas malaltigi ĝin), la mezumon ĝi altigas forte. En la sentemkurbo ĝi tial estas proksimume afina — ĝis la 4-%-a aŭ 8-%-a poto elĉerpiĝas, tiam la kurbo faldiĝas.',
+ 'f.I:agz_fix_dyn.hint': 'Fiksaj sumoj plej ofte staras nominale en la tarifa kontrakto kaj altiĝas nur ĉe tarifaj rondoj — antaŭagordo tial „nominale konstanta“. Post 27 jaroj kun 2 % da inflacio restas de tio la faktoro 1,02⁻²⁷ ≈ 0,59; kiu trovas tion tro pesimisma, ŝaltas al „kun la salajro“ kaj ricevas realan aldonon kun kreskorapideco gsteig − infl.',
+ 'f.I:agzus_sv.hint': '„Efektiva ŝparo“ estas la leĝa vortumo: § 1a Abs. 1a BetrAVG ŝuldas la aldonon nur, KIOM la dunganto efektive ŝparas kotizojn. Se via salajro superas ambaŭ kotizolimojn, li ŝparas nenion kaj ŝuldas nenion. Tial la ŝovilo saturiĝas tie en la baza kazo je ĉirkaŭ 21 %. „Plena kotizo“ estas libervola aŭ tarifkontrakta promeso, „senkotiza parto“ la disvastigita ronduma praktiko. Fidindeco de la „efektiva“ legmaniero ĉ. 75 %.',
+ 'f.I:dyn.hint': 'Se la kotizo kreskas kun la salajrokresko, la uzo de la 8-%-a poto restas proksimume konstanta tra la jaroj. Se ĝi restas nominale konstanta, ĝia reala valoro malkreskas kun la inflacio — kaj la neta elspezo, kiun la du aliaj ebloj ricevas por la komparo, malkreskas kun ĝi.',
+ 'f.I:rendite.hint': 'Antaŭ kostoj, antaŭ impostoj. En ĉiuj tri ebloj la sama ETF — nur tiel oni komparas subvenciarkitekturojn, ne investodecidojn.',
+ 'f.I:alter.hint': 'Komenca punkto de la ŝparfazo. Kalendara jaro 0 = 2026.',
+ 'f.I:rentbeg.hint': 'Komenco de la elpagofazo de ĉiuj tri ebloj. La Altersvorsorgedepot estas elpagebla plej frue ekde 65 (reformo 2026).',
+ 'f.I:kv_ruhe.hint': 'La decida levilo. En la leĝa malsanasekuro entreprenaj pensioj estas Versorgungsbezüge kaj portas la plenan kotizokvoton (§§ 229, 250 SGB V); privata pensiprovizo ne. Nur ĉi tiu agordo turnas la rezulton.',
+ 'f.I:auszform.hint': 'Kapitalo: en la ricevojaro plene impostenda, kotizoj al la malsanasekuro distribuitaj sur 120 monatojn (§ 229 Abs. 1 S. 3 SGB V). La rento etendas la ricevon sur la restan vivdaŭron kaj tial ŝirmas multoblon da kapitalo sub la sama sensumo. La modelo konas nur tute aŭ tute ne; parta kapitaligo de la bAV ne estas modeligita.',
+ 'f.I:teilkap.hint': 'Ĝis 30 % de la ŝparita kapitalo eblas komence de la elpagofazo kiel unufoja sumo — en ambaŭ elpagoformoj. Ĝi kostas pro du kialoj: plena progreso en la ricevojaro kaj poste nur plu la interezo post kapitalimposto. La supraĵo super la jara maksimuma sumo („sleeve“) estas rentigita sen unufoja sumo; tio estas modela konvencio, ne leĝa regulo.',
+ 'f.I:av_auszform.hint': 'Kio okazas al la kapitalo preter la unufoja sumo — sendepende de la bAV-decido super tio. Elpagoplano: la mono restas investita kaj estas prenata kun interezo; la nesubvenciata tavolo estas impostata per la duono de la diferenca sumo. Vivdaŭra rento: la kapitalo iras al la provizanto, sed la nesubvenciata tavolo estas impostata nur per la rendimenta parto (§ 22 Nr. 5 S. 2 Buchst. a EStG, 17 % ekde aĝo 67 anstataŭ ĉi tie ĉirkaŭ 26 %). La subvenciata tavolo estas en ambaŭ kazoj plene poste impostenda, tio ne ŝanĝiĝas.',
+ 'f.I:agz_fix_min.hint': 'Kongruaj modeloj ligas la fiksan sumon al minimuma propra kontribuo („kiu konvertas almenaŭ X, ricevas Y“). 0 signifas senkondiĉa — tiam la aldono fluas en ĉiu aktiva jaro, eĉ ĉe nula kotizo. Atentu la modelan semantikon: vere senkondiĉa aldono ne estus diferenca efiko de la konverta decido kaj kalkuliĝus favore al la bAV en la komparo, kvankam ĝi fluus ankaŭ sen konverto. Enskribu nur tion, kio efektive dependas de la partopreno.',
+ 'f.I:rentfak_av.hint': 'Nur ĉe rentigo de la depono. Antaŭagordita kiel ĉe la bAV; depona kontrakto ne bezonas asekuran mantelon kaj tial povas esti pli favora — enskribu la valoron el la konkreta oferto. Ĉe 0 ne ekzistas rento.',
+ 'f.I:rentdyn_av.hint': 'Superfluopartopreno resp. fonda evoluo en la renta fazo de la depona kontrakto.',
+ 'f.I:rentfak.hint': 'Nur ĉe elpagoformo „rento“. 26 € monata rento po 10.000 € respondas al ĉirkaŭ 3,1 % prenokvoto. Troviĝas en la produktinforma folio.',
+ 'f.I:rentdyn.hint': 'Superfluopartopreno resp. fonda evoluo en la renta fazo.',
+ 'f.I:fuenftel.hint': '§ 34 EStG validas ĉe plana kapitala elpago el § 3 Nr. 63-kontraktoj laŭ BFH X R 23/15 nur escepte. Konservative: ne.',
+ 'f.I:planende.hint': 'Elpagoplanoj daŭras ĝis ĉi tie. Vivdaŭraj rentoj estas komparataj super la sama horizonto; kio poste ankoraŭ fluas, staras kiel memorando sub „Diagnozo“. Kiu maljuniĝas, gajnas tie.',
+ 'f.I:ausscheid.hint': 'Ekde ĉi tie neniu salajro kaj neniuj kotizoj plu. La kapitalo plu portas interezon ĝis la komenco de la elpago.',
+ 'f.I:tzalter.hint': 'Ĉiu valoro ekde la komenco de la elpago signifas: neniu parttempo. Antaŭagordo tial 67.',
+ 'f.I:tzfaktor.hint': 'Parto de la plentempa salajro. 60 % = 60-procenta posteno.',
+ 'f.I:gsteig.hint': 'Ankaŭ pluportas la kotizolimojn, la Bezugsgröße, la mezan salajron kaj la pensian valoron.',
+ 'f.I:stkl.hint': 'Decida estas la TAKSADO-SPECO, ne la salajroimposta klaso: la klaso regas nur la inter-jaran depostenon, la jara decido ĉiukaze kalkulas kun duonigo laŭ § 32a Abs. 5 EStG. Ĉe „kune“ nepre enskribu la imposteblan enspezon de la partnero.',
+ 'f.I:partner.hint': 'Nur ĉe komuna taksado. Kalkulata estas 2·ESt((zvE + zvE_partnero)/2).',
+ 'f.I:kist.hint': '8 % en Bavario kaj Baden-Virtembergo, alie 9 %, 0 ĉe eliro el la eklezio. Efikas ankaŭ sur la kapitalimposto: 0,25/(1+0,25k)·(1+0,055+k).',
+ 'f.I:tarifanp.hint': 'La tuta tarifo estas etendita per la faktoro λ = (1+x)^t: ESt = s·λ·T(zvE/s/λ). Tio estas ekzakte ekvivalenta al proporcia ŝovo de ĉiuj limvaloroj. 0 % montras plenan malvarman progreson.',
+ 'f.I:kinder.hint': 'Infana aldono en la Altersvorsorgedepot: 1 € po enpagita €, ĝis 300 € po infano.',
+ 'f.I:kind_jahre.hint': 'La infana aldono dependas de la rajto je infana mono (§ 85 EStG), do ne daŭras tra la tuta ŝparfazo.',
+ 'f.I:kinderlos.hint': '0,6 procentpunktoj da aldono al la flegasekuro, portata sole de la dungito (§ 55 Abs. 3 SGB XI).',
+ 'f.I:k_bav.hint': 'Asekura mantelo plus TER. La efektivaj kostoj staras en la produktinforma folio — tie kontrolu, ne taksu.',
+ 'f.I:k_av.hint': 'Ĉe la norma depono la efektivaj kostoj estas leĝe limigitaj al 1,0 % jare.',
+ 'f.I:k_priv.hint': 'Pura TER de larĝa monda ETF.',
+ 'f.I:infl.hint': 'Rabatkvoto por ĉiuj indikoj „en hodiaŭa aĉetpovo“. Apenaŭ ŝanĝas la rangordon, sed ĉiujn nivelojn.',
+ 'f.I:sonst_zve.hint': 'Precipe la imposteble parto de la leĝa pensio, sen la ĉi tie komparataj produktoj. Difinas la marĝenan impostkvoton en la elpagofazo — kaj tial la tarifan arbitraĝon t₀ − t₁.',
+ 'f.I:rente_br.hint': 'Nur por la plafono en la malsanasekuro: leĝa pensio kaj Versorgungsbezüge kunhavas UNU kotizolimon (§ 223 Abs. 3 SGB V).',
+ 'f.P:bbg_rv.hint': 'SVBezGrV 2026 (BGBl. 2025 I Nr. 116), tutlanda.',
+ 'f.P:bbg_kv.hint': 'SVBezGrV 2026; 5.812,50 € monate.',
+ 'f.P:bezug.hint': 'SVBezGrV 2026, 47.460 € jare. Dudekono de tio estas la sensumo por Versorgungsbezüge en la malsanasekuro (§ 226 Abs. 2 S. 2 SGB V).',
+ 'f.P:de_rv.hint': 'Aldono 1 al SGB VI, valoro 2026 — denominatoro por la pensiaj punktoj.',
+ 'f.P:rw.hint': 'Rentenwertbestimmungsverordnung 2026, ekde 1.7.2026: 42,52 € (+4,24 %).',
+ 'f.P:rv_an.hint': '18,6 % duone.',
+ 'f.P:av_an.hint': '2,6 % duone.',
+ 'f.P:kv_allg.hint': '§ 241 SGB V.',
+ 'f.P:kv_zus.hint': 'Publikigo de la BMG; diferencas laŭ kaso — enskribu la kvoton de via kaso.',
+ 'f.P:pv_ges.hint': '§ 55 SGB XI. Infanaj rabatoj ekde la dua infano ne estas modeligitaj.',
+ 'f.P:pv_an.hint': 'Diferenca en Saksio (2,3 %).',
+ 'f.P:pv_kl.hint': '§ 55 Abs. 3 SGB XI, sole de la dungito.',
+ 'f.P:gfb.hint': '§ 32a Abs. 1 EStG laŭ la Steuerfortentwicklungsgesetz.',
+ 'f.P:e2.hint': 'Marĝena impostkvoto kreskas de 14 % al 23,97 %.',
+ 'f.P:e3.hint': 'Marĝena impostkvoto kreskas de 23,97 % al 42 %.',
+ 'f.P:e4.hint': 'Ekde 277.826 € validas 45 %.',
+ 'f.P:a2.hint': 'ESt = (a₂·y + b₂)·y kun y = (zvE − baza sensumo)/10.000.',
+ 'f.P:a3.hint': 'ESt = (a₃·z + b₃)·z + c₃ kun z = (zvE − 17.799)/10.000.',
+ 'f.P:c4.hint': 'ESt = 0,42·zvE − c₄.',
+ 'f.P:c5.hint': 'ESt = 0,45·zvE − c₅.',
+ 'f.P:soli.hint': 'SolzG 1995.',
+ 'f.P:soli_fg.hint': '2026, baza tarifo, rilate al la fiksita ESt; ĉe duonigo duobla. Krome mildiga zono.',
+ 'f.P:soli_mz.hint': '§ 3 Abs. 2a SolzG.',
+ 'f.P:an_pausch.hint': '§ 9a S. 1 Nr. 1a EStG.',
+ 'f.P:sa_pausch.hint': '§ 10c EStG.',
+ 'f.P:kapst.hint': '§ 32d Abs. 1 EStG.',
+ 'f.P:tfs.hint': '§ 20 Abs. 1 Nr. 3 kun § 20 InvStG, akcia parto super 50 %.',
+ 'f.P:sparerpb.hint': '§ 20 Abs. 9 EStG; ĉe duonigo duobligita. Ensorbas grandan parton de la Vorabpauschale — vidu la valorpelantojn.',
+ 'f.P:basiszins.hint': 'BMF-letero de 13.01.2026, § 18 Abs. 4 InvStG (2025: 2,53 %). Meti al 0 signifas: neniu Vorabpauschale.',
+ 'f.P:vp_faktor.hint': '§ 18 Abs. 1 S. 1 InvStG.',
+ 'f.P:st_frei_q.hint': '8 % de la BBG-RV = 8.112 € en 2026.',
+ 'f.P:sv_frei_q.hint': '§ 1 Abs. 1 S. 1 Nr. 9 SvEV; 4 % = 4.056 € en 2026. Samtempe la limo de la leĝa rajto laŭ § 1a BetrAVG.',
+ 'f.P:zul_g1.hint': 'Altersvorsorgereformgesetz, valida ekde majo 2026, aplikata ekde 1.1.2027.',
+ 'f.P:zul_s1.hint': 'Ĝis 360 € propra kotizo: 50 cendoj po €.',
+ 'f.P:zul_g2.hint': 'De 361 ĝis 1.800 €: 25 cendoj po €.',
+ 'f.P:zul_s2.hint': 'Maksimuma subvenciata propra kotizo; rezultigas maksimuman bazan aldonon de 540 €.',
+ 'f.P:kind_zul.hint': '1 € po enpagita €, ĝis 300 € po infano.',
+ 'f.P:av_max.hint': 'BMF-FAQ pri la reformo de la subvenciata privata pensiprovizo, stato 05.05.2026. Kio superas tion, iras en flankan vojon, kiu estas impostata kiel privata depono.',
+ 'f.P:av_sa_max.hint': 'MODELA SUPOZO, fidindeco ĉ. 70 %. Propra kotizo ĝis 1.800 € plus aldonoj. Ĝuste ĉi tiu unu nombro decidas, ĉu infano altigas aŭ malaltigas la valoron de la AV-depono.',
+ 'f.P:ertragsq.hint': '§ 22 Nr. 1 S. 3 Buchst. a Doppelbuchst. bb EStG, por nesubvenciataj partoj de la rento.',
+ 'f.P:halb.hint': '§ 20 Abs. 1 Nr. 6 S. 2 EStG analoge (kontrakto super 12 jaroj, elpago post 62): duono de la diferenca sumo. Fidindeco ĉ. 80 %.',
+
+ /* ---------------- Ĝenerala teksto, piedo, indikiloj ---------------- */
+ 'app.meta': 'Kompari entreprenan pensiprovizon, Altersvorsorgedepot kaj privatan ETF-deponon je sama neta elspezo. Laŭleĝa stato 2026.',
+ 'hdr.sub': 'Entreprena pensiprovizo, Altersvorsorgedepot kaj privata ETF-depono &mdash; je <b>sama neta elspezo</b> kaj kun la sama ETF. Laŭleĝa stato 2026.',
+ 'input.sub': 'La nombroj rekalkuliĝas tuj ĉe ĉiu ŝanĝo. Per <span class="qm" style="cursor:default">?</span> ĉiu kampo klarigas sin mem.',
+ 'extra.sub': 'Ĉio ĉi tie havas senencajn antaŭagordojn. Tuŝu nur, se tio validas por vi.',
+ 'calc.sub': 'Por ĉiuj, kiuj volas sekvi la kalkulon.',
+ 'share.sub': 'Viaj indikoj troviĝas ekskluzive en ĉi tiu retumilo (<kbd>localStorage</kbd>). Nenio estas transdonata, ne ekzistas servilo nek spurilo.',
+ 'footer.1': '<b>Neniu imposta aŭ investa konsilo.</b> Modelo ne estas kontrakto. La laŭleĝa stato 2026 pri la reformita privata pensiprovizo ne estas ĉie fine klarigita; la supozoj kun la plej malalta fidindeco staras sub „Kalkulvojo → Fidindeco de la supozoj“ kaj estas tie ankaŭ ŝanĝeblaj.',
+ 'footer.2': 'Kalkula kerno unu-al-unu portita el la Excel-modelo <span class="pill">bAV-DYNO_vs_Altersvorsorgedepot_vs_ETF.xlsx</span> kaj kontrolita kontraŭ tri testkazoj ĝis maŝina precizeco (plej granda relativa devio 1,3·10<sup>&minus;14</sup>).',
+ 'metric.monat.desc': 'Konstanta monata pago tra la tuta elpagofazo kun la sama valoro, en hodiaŭa aĉetpovo. La sola nombro, kiu rekte kompareblas kun via hodiaŭa neta enspezo.',
+ 'metric.ertrag.desc': 'Kion la eblo en hodiaŭa aĉetpovo rezultigas preter la propra investo: nuna valoro de ĉiuj netaj elpagoj minus nuna valoro de la neta elspezo.',
+ 'metric.irr.desc': 'Rendimento sur la efektive investita neta sumo, nominala. Rekte komparebla kun la agordita kruda rendimento de la ETF — la diferenco estas ĝuste tio, kion subvencio kaj kotizoj kune kostas aŭ alportas.',
+ 'metric.kapital.desc': 'Antaŭ impostoj kaj antaŭ socialaj kotizoj, nominala. Intence NE la decida grando: la bAV ofte gvidas ĉi tie, sed perdas ĉe la elpago.',
+ 'ui.couple': '<span>⇅</span> Du vidpunktoj al la sama grando. Ŝanĝu unu, la alia sekvas.',
+ 'ui.legalNote': 'Leĝaj grandoj kun fonto. Ŝanĝu nur, se la leĝo ŝanĝiĝis aŭ via kaso diferencas.',
+
+ /* ---------------- Kondiĉaj rimarkoj ĉe la ŝoviloj ---------------- */
+ 'n.beitrag.ueber8': function(p, f){
+ return 'Super 8 % de la kotizolimo RV (' + f.eur(p.v8) + ' jare). La parto super tio estas nek '
+ + 'imposte nek socialasekure favorata — ĝi iras en la asekuran mantelon kaj tie ricevas nur '
+ + 'la kotizodevon en la malsanasekuro.'; },
+ 'n.beitrag.ueber4': function(p, f){
+ return 'Super 4 % de la kotizolimo RV (' + f.eur(p.v4) + ' jare). Ĝis ĉi tie vi havas leĝan '
+ + 'rajton laŭ § 1a BetrAVG, super tio necesas la konsento de la dunganto.'; },
+ 'n.agzus.gedeckelt': function(p, f){
+ return 'Plafonigita ĉe ' + f.pct(p.quote, 1) + '. La dunganto efektive ŝparas nur '
+ + f.eur2(p.ersparnis) + ' jare — pli altaj valoroj nenion ŝanĝas ĉi tie, dum la aldona '
+ + 'reĝimo restas „efektiva ŝparo“.'; },
+ 'n.agz_fix.fliesstNicht': function(p, f){
+ return 'Ne fluas: via monata kotizo de ' + f.eur2(p.beitrag) + ' estas sub la minimuma sojlo '
+ + 'de ' + f.eur2(p.schwelle) + ' (kampo sub „Pliaj indikoj“).'; },
+ 'n.agz_fix.ueber4': function(p, f){
+ return 'La fiksa aldono sole superas la 4-%-an poton (' + f.eur(p.topf)
+ + ' jare) je ' + f.eur(p.ueber) + '. Ĉi tiu parto estus ĉe vi kotizodeva laborenspezo — la '
+ + 'modelo NE kontraŭkalkulas la kroman kotizoŝarĝon kaj tiugrade supertaksas la bAV.'; },
+ 'n.agz_fix.verdraengung': function(p, f){
+ return 'Plenigas la 4-%-an poton prioritate: de via propra kotizo restas nur ankoraŭ '
+ + f.eur(p.rest) + ' sen sociala kotizo. Via neta elspezo tial altiĝas — la aldono tamen '
+ + 'restas donacita mono, ĝi nur ŝovas la limon de la propra subvencio.'; },
+ 'n.agz_fix.ueber8': 'Kune kun la propra kotizo super 8 % de la BBG-RV — la supraĵo estas nek imposte nek kotize favorata.',
+ 'n.agz_fix_min.knapp': function(p, f){
+ return 'Vi estas nur ' + f.eur2(p.d) + ' super la sojlo. Sub tio la fiksa aldono tute forfalas: '
+ + 'la marĝena rendimento de la lasta kotiza eŭro estas ĉi tie senfina, la kunligo kruda ↔ '
+ + 'neta tie malkontinua.'; },
+ 'n.agz_fix_min.verfehlt': function(p, f){
+ return 'Sojlo ne atingita — ' + f.eur2(p.fehlt) + ' pli po monato ekigas ' + f.eur2(p.zuschuss)
+ + ' aldonon. Tio preskaŭ ĉiam estas la plej valora eŭro en la tuta modelo.'; },
+ 'n.teilkap.kosten': function(p, f){
+ return 'Kostas ' + (p.gewinn ? 'nenion, kontraŭe: ' + p.dtxt : p.dtxt + ' ' + p.unit)
+ + ' kompare kun pura rentigo. Kialo: la unufoja sumo estas en la ricevojaro plene impostenda '
+ + '(marĝena ŝarĝo tie ' + f.pct(p.grenz, 1) + ') kaj poste portas interezon nur laŭ la kvoto '
+ + 'post kapitalimposto anstataŭ la produkta rendimento.'; },
+ 'n.av_auszform.horizont': function(p, f){
+ return 'Preter la komparhorizonto ĉi tiu rento ankoraŭ pagas ' + f.eur(p.rest)
+ + ', kiuj ĉi tie NE estas kalkulataj. Fiksa horizonto sisteme subtaksas ĉiun vivdaŭran '
+ + 'renton — kiu maljuniĝas, gajnas ĉi tie.'; },
+ 'rank.swap': function(p, f){
+ return '<b>La indikiloj malkonsentas.</b> Laŭ monata pago '
+ + p.a + ' gvidas antaŭ ' + p.b + ', laŭ nuna valoro de la neta gajno estas inverse. '
+ + 'Kialo: la nuna valoro rabatas per la inflacio (' + f.pct(p.infl, 2) + '), la monata pago '
+ + 'rentigas per la reinvesta interezo post impostoj (' + f.pct(p.wiederanl, 2) + '). Ju pli '
+ + 'tiuj du diferencas, des pli bone staras frua kapitala elpago. Kiu indikilo validas, dependas '
+ + 'de tio, ĉu vi investus aŭ elspezus la monon — ĉe „elspezi“ metu la valoron en la kampo '
+ + '„Kostoj de la privata ETF-depono“ tiel, ke la reinvesta interezo iras al nulo.'; },
+ 'warn.unreachable': 'Ĉi tiu neta elspezo ne estas atingebla — ĝi superas vian salajron. Agordita estis la plej alta ebla valoro.',
+ 'warn.inactive': 'En la unua jaro vi laŭ viaj indikoj ne plu laboras — ne ekzistas salajrokonverto, do ankaŭ neniu neta elspezo, al kiu kruda kotizo estus rekalkulebla. Kontrolu „Eliro el la laboro“ kaj „Aĝo hodiaŭ“.',
+ 'verdict.lead': function(p){
+ return '<b>' + p.satz + '</b> gvidas kun ' + p.wert + ' — ' + p.d2 + ' pli ol ' + p.nom2
+ + (p.nom3 ? ' kaj ' + p.d3 + ' pli ol ' + p.nom3 : '') + '.'; },
+ 'verdict.top': function(p, f){
+ return ' La plej grandan unuopan postenon en la diferenco ' + p.gen + ' al la privata ETF-depono '
+ + 'formas „' + p.label + '“ — kaj nome ' + (p.pro ? 'favore al' : 'malfavore al') + ' ' + p.gen
+ + ', kun ' + f.eur(p.wert) + ' nuna valoro. La plena malkomponado staras sub „Valorpelantoj“.'; },
+ 'verdict.band': function(p, f){
+ return '<span class="band">Kiom fidinda tio estas? Ĉe kruda rendimento de ' + f.pct(p.lo, 1)
+ + ' anstataŭ ' + f.pct(p.mid, 1) + ' estus ' + p.vlo + ', ĉe ' + f.pct(p.hi, 1) + ' estus '
+ + p.vhi + ' — la rangordo '
+ + (p.stabil ? 'restas la sama en ĉi tiu spano.'
+ : '<b>inversiĝas en ĉi tiu spano</b>, la rezulto do ĉi tie ne fidindas.')
+ + '</span>'; },
+ 'demo.text': '<b>Tio ankoraŭ estas ekzemplaj valoroj</b> — 40-jaraĝa, 75.000 € jara kruda salajro, 300 € salajrokonverto monate, leĝe malsanasekurita. Enskribu sub „Viaj indikoj“ viajn proprajn; ĉi tiu rimarko tiam malaperos memstare.',
+ 'sens.readout': 'Streketita: via aktuala valoro. Ringoj: krucpunktoj kun la privata depono. Ŝvebu aŭ tuŝu super la kurbo por valoroj.',
+ 'sens.note': function(p){
+ return 'La laste movita ŝovilo estas kalkulita tra sia tuta spano — ' + p.n
+ + ' plenaj modelaj kalkuloj. Aktuale: „' + p.label + '“. '
+ + 'Movu alian ŝovilon, kaj la kurbo ŝanĝiĝas kun ĝi.'; },
+ 'sens.noteNetto': function(p, f){
+ return ' Atentu: ĉi tiu ŝovilo ŝanĝas ankaŭ la netan elspezon (ĉi tie ' + f.eur2(p.lo) + ' ĝis '
+ + f.eur2(p.hi) + ' monate) kaj tial la sumon, kiu estas investata en ĉiuj tri ebloj. '
+ + 'Tial la tri kurboj estas juste kompareblaj ĉe ĉiu unuopa x, sed la nivelo inter '
+ + 'diversaj x ne. La faldiĝoj sidas ĉe la kotizolimoj ('
+ + f.eur(p.bbgkv) + ' por KV/PV, ' + f.eur(p.bbgrv) + ' por RV/AV) kaj ĉe la tarifaj limoj.'; },
+ 'wf.check': function(p, f){
+ return 'Kontrolo: ' + f.eur(p.start) + ' + ' + f.eur(p.summe) + ' = ' + f.eur(p.start + p.summe)
+ + ' (devus ' + f.eur(p.ende) + ', devio ' + f.nf2(p.start + p.summe - p.ende) + ' €).'; },
+ 'wf.note': 'Teleskopa malkomponado, tial ĝi ekzakte kongruas — sed ĝi estas <b>vicordo-dependa</b>: la efikoj ne estas adiciece disigeblaj, ĉiu stango mezuras la kontribuon <i>donite</i> tiujn super ĝi. Tuŝu stangon por la derivado.',
+ 'wfb.vp.note': 'Nek la bAV nek la Altersvorsorgedepot konas la Vorabpauschale (§ 18 InvStG). Mezurita kiel privata depono sen Vorabpauschale minus kun. La stango povas esti negativa: la Vorabpauschale plejparte iras en la ŝparanta forfeta sensumo, sed plene altigas la kostan bazon — tiam ĝi por la privata depono nete estas avantaĝo.',
+ 'wfb.zul.note': 'Fremda mono laŭ la nova aldona modelo plus la dedukto laŭ § 10a EStG. Mezurita per malŝalto de ambaŭ subvenciaj vojoj.',
+ 'wfb.arch.note': 'Tarifa arbitraĝo t₀ − t₁ kaj ĉio cetera. Restaĵo difinita, por ke la ĉeno ekzakte kongruu.',
+ 'wfb.agz.note': 'Fremda mono — la sola struktura avantaĝo de la bAV, kiu ne venas de la imposta juro. Mezurita per malŝalto de la aldono.',
+ 'wfb.tarif.note': 'Marĝena impostkvoto ĉe enpago minus ĉe elpago, plus ĉio cetera. Restaĵo difinita, por ke la ĉeno ekzakte kongruu. Sola imposta prokrasto senvaloras: (1−t)(1+r)ⁿ = (1+r)ⁿ(1−t), multipliko komutas.',
+ 'wfb.kvpv.note': '§§ 229, 250 SGB V: la plenan kotizokvoton portas la pensiulo sole. Mezurita kiel diferenco al la agordo „PKV en la emeriteco“.',
+ 'wfb.ep.note': 'Salajrokonverto malaltigas la kotizodevan salajron kaj tial la leĝan pension. Nete kontraŭkalkulita.',
+ 'kap.readout': function(p, f){
+ return 'Ĉe la komenco de la pensio ligita: bAV ' + f.eur(p.bavGeb) + ' de ' + f.eur(p.bav)
+ + ' · AV-depono ' + f.eur(p.avGeb) + ' de ' + f.eur(p.av)
+ + ' · privata depono ' + f.eur(0) + ' de ' + f.eur(p.priv)
+ + '. La ekvivalenta monata pago estas konsumata, tial ĉiu eblo finiĝas ĉe nulo.'; },
+ 'kap.note': function(p, f){
+ return 'Konto-stato en la produkto, en la elpagofazo plus la nete reinvestitaj '
+ + 'elpagoj (' + f.pct(p.wiederanl, 2) + ' post impostoj) kaj minus la ekvivalenta '
+ + 'monata pago, kiu efektive estas konsumata. Tial ĉiu eblo kuras precize al nulo. '
+ + 'Ĉar la konsumo eliras nur el la reinvesto kaj la produkta kapitalo restas en la produkto, kie ĝi '
+ + 'kreskas kun la produkta rendimento antaŭ impostoj, la kurboj tamen ne kuras proporcie. '
+ + '— La streketita linio estas la libere disponebla parto: la bAV estas ĝis la komenco de la '
+ + 'pensio plene ligita (§ 1b BetrAVG konas nemalvalidiĝon, ne disponeblecon), ĉe la '
+ + 'Altersvorsorgedepot elpago antaŭ 65 estas subvenci-difekta kaj libera nur la supraĵo super la '
+ + 'jara maksimuma sumo, la privata depono estas ĉiam libera. Tio estas la sola akso, sur kiu '
+ + 'kapitala elpago aspektas bone. '
+ + (p.verrentet ? 'Ĉar vi rentigas la deponon, ankaŭ tie la kapitalo iras al la provizanto — la '
+ + 'kurbo tial falas, kvankam nenio perdiĝas. ' : '')
+ + 'Kaj ankoraŭ unufoje eksplicite: la kurboj montras la havaĵon el ĈI TIU unu decido, '
+ + 'ne vian tutan havaĵon.'; },
+ 'zer.readout': 'Ĉio kiel konstanta monata pago en hodiaŭa aĉetpovo. Ĉar rentigo estas lineara, la blokoj adiciiĝas ekzakte.',
+ 'zer.note': function(p, f){
+ return 'La rilata periodo estas identa por ĉiuj tri ebloj. Kapitala elpago ne estas dividita '
+ + 'per dek du, sed rentigita per la reinvesta interezo post impostoj (' + f.pct(p.wiederanl, 2)
+ + ' jare) sur la saman periodon. Kiu konsumas la kapitalon anstataŭ investi ĝin, staras '
+ + 'pli malbone.'; },
+ 'det.warn.lead': 'Vi troviĝas ekster la favorata koridoro: ',
+ 'det.warn.aussch': 'Super 100 % uzo ne plu ekzistas leĝa rajto je salajrokonverto. ',
+ 'det.warn.ngef': 'Konsiderinda parto de la kotizoj estas nek imposte nek socialasekure favorata — ĉi tiu tavolo iras en asekuran mantelon, ricevante nenion krom la kotizodevon en la malsanasekuro. ',
+ 'det.warn.vb': 'La Versorgungsbezug klare superas la sensumon; la protekta efiko de la absoluta sensumo falas kiel 1/kapitalo. ',
+ 'det.ann.intro': 'La rangordo dependas de juraj demandoj, kiuj en 2026 ankoraŭ ne ĉiuj klaras. La nombroj en krampoj estas subjektivaj fidindecoj.',
+ 'det.ann.notmodelled': '<b>Ne modeligite:</b> rabatoj ĉe frutempa pensio, efiko de la salajrokonverto sur mal­san-, senlaborec- kaj gepatra mono, postvivanta provizo, insolventeca sekurigo (PSVaG), portebleco ĉe dunganto-ŝanĝo, infanaj rabatoj en la flegasekuro, favoreca kontrolo laŭ § 32d Abs. 6 EStG, ekzekuta kaj baza sekureca protekto, longviveca risko preter la horizonto.',
+ 'det.prinzip': '<p>Komparo de <i>krudaj kotizoj</i> estus maljusta: salajrokonverto venas el la kruda, privata ŝparo el la neta. Tial la <b>neta elspezo</b> estas egaligita:</p>'
+ + '<p style="font-family:var(--mono);font-size:.82rem;background:var(--chip);padding:9px 11px;border-radius:9px">Neta elspezo = Kruda kotizo − ŝparo de salajroimposto − ŝparita AN-parto al la socialasekuro</p>'
+ + '<p>Ĝuste tiu sumo estas investata en ĉiuj tri ebloj. Kio restas, estas komparo de <i>subvenciarkitekturoj</i>, ne de la enpagaltoj.</p>'
+ + '<p><b>Imposta prokrasto sole estas senvalora:</b> (1−t)·(1+r)ⁿ = (1+r)ⁿ·(1−t). Multipliko komutas. Restas nur kvar valorpelantoj:</p>'
+ + '<ol style="padding-left:1.2em;margin:.3em 0"><li>Tarifa arbitraĝo t₀ − t₁</li>'
+ + '<li>Fremda mono — dunganta aldono resp. subvencioj</li>'
+ + '<li>senimposta tezaŭrado — neniu Vorabpauschale</li>'
+ + '<li>novaj kotizoj, kiuj trafas nur unu eblon — KV/PV sur Versorgungsbezüge</li></ol>'
+ + '<p>Punkto 4 estas la domina malavantaĝo de la bAV, punkto 2 ĝia sola struktura avantaĝo. La rendimento de la bAV <b>falas strikte monotone kun la kotiza alto</b>, ĉar la sensumo estas absoluta kaj ĝia protekta efiko malkreskas kiel 1/K — ne ekzistas interna optimumo.</p>'
+ + '<p>Ĉe antaŭfiksita neta elspezo la kruda kotizo estas rekalkulita per duonigo: N(B) estas kontinua kaj strikte monotone kreskanta (dN/dB = 1 − marĝena kotizkvoto − marĝena impostkvoto > 0), sed pro la faldiĝoj ĉe 4 % kaj 8 % de la BBG-RV, ĉe la kotizolimoj kaj ĉe la tarifaj limoj ne fermforme inversigebla. 34 duonigoj liveras sub dekono de cendo.</p>',
+ 'det.s.erg': 'Ĉiuj tri ebloj kostas en la ŝparfazo ekzakte la saman sumon el la neto.',
+ 'det.s.mon': 'Ĉiuj ebloj rentigitaj super la sama periodo, en hodiaŭa aĉetpovo. Ĉar rentigo estas lineara, la linioj adiciiĝas ekzakte.',
+ 'det.s.diag': 'Kial tio okazas — kaj kie vi staras ekster la favorata koridoro.',
+ 'msg.linkCopied': 'Ligilo kopiita. Kiu malfermas ĝin, vidas ĝuste ĉi tiujn nombrojn — nenio el tio pasas per servilo.',
+ 'msg.linkFailed': 'Kopiado ne funkciis. La ligilo nun staras en la adresa linio.',
+ 'pwa.offline': '<b>Eluzebla eksterrete.</b> La aplikaĵo nun kuŝas en la retumila kaŝmemoro kaj funkcias ankaŭ sen konekto. Por instali: sur iPhone „Kunhavigi“ → „Aldoni al la Hejmekrano“, sur Android la menuo → „Instali aplikaĵon“.',
+ 'pwa.installAsk': '<b>Instali kiel aplikaĵon?</b> Tiam ĝi kuŝas kun propra simbolo sur la hejma ekrano kaj funkcias eksterrete. ',
+ 'pwa.declined': 'Bone — la aplikaĵo funkcias ankaŭ tiel, kaj nome eksterrete.',
+ 'pwa.file': '<b>Vi malfermis la dosieron rekte</b> (<kbd>file://</kbd>). Ĉio kalkulas, ĉio konserviĝas. Nur la du PWA-ecoj mankas: neniu simbolo sur la hejma ekrano kaj neniu eksterreta kaŝmemoro — tio ĉi tie ankaŭ ne bezonatus, la dosiero ja jam kuŝas sur la aparato. Por la plena aplikaĵa sperto, metu la dosierujon sur ajnan HTTPS-retspacon kaj malfermu de tie.'
+};
diff --git a/app/i18n.eu.js b/app/i18n.eu.js
new file mode 100644
index 0000000..ea43e3d
--- /dev/null
+++ b/app/i18n.eu.js
@@ -0,0 +1,591 @@
+/* =====================================================================
+ Euskarazko hiztegia — OSOA (459 gako).
+ Lege-aipamenak nahita alemanez daude: iturri primarioak dira eta ez dute
+ itzulpen ofizialik. „bAV“ = Entgeltumwandlung, soldata gordinetik
+ elikatzen den enpresa-pentsioa; euskaraz ez dago baliokide zehatzik,
+ beraz laburdura mantendu da. „Altersvorsorgedepot“ eta
+ „Versorgungsbezüge“ ere izen propio gisa mantentzen dira.
+ ===================================================================== */
+window.I18N_EU = {
+ 'f.I:gehalt.label': 'Gaurko urteko soldata gordina',
+ 'f.I:beitrag.label': 'Hileko bAV ekarpena, gordina',
+ 'f.I:netto_ziel.label': 'Hileko gastu garbia',
+ 'f.I:agzus.label': 'Enplegatzailearen ekarpena',
+ 'f.I:agz_fix.label': 'Ekarpen finko gehigarria',
+ 'f.I:agz_fix_dyn.label': 'Ekarpen finkoa indexatu',
+ 'f.I:agz_fix_dyn.o0': 'nominalean konstante',
+ 'f.I:agz_fix_dyn.o1': 'soldatarekin batera',
+ 'f.I:agzus_sv.label': 'Ekarpen modua',
+ 'f.I:agzus_sv.o0': 'ekarpen osoa',
+ 'f.I:agzus_sv.o1': 'salbuetsitako zatia soilik',
+ 'f.I:agzus_sv.o2': 'benetako aurrezkia',
+ 'f.I:dyn.label': 'Ekarpena indexatu',
+ 'f.I:dyn.o1': 'soldatarekin batera',
+ 'f.I:dyn.o0': 'nominalean konstante',
+ 'f.I:rendite.label': 'ETFaren errendimendu gordina, urtekoa',
+ 'f.I:alter.label': 'Gaurko adina',
+ 'f.I:alter.unit': 'urte',
+ 'f.I:rentbeg.label': 'Ordainketaren hasiera',
+ 'f.I:rentbeg.unit': 'urte',
+ 'f.I:kv_ruhe.label': 'Osasun-asegurua erretiroan',
+ 'f.I:kv_ruhe.o1': 'legezkoa',
+ 'f.I:kv_ruhe.o2': 'pribatua',
+ 'f.I:auszform.label': 'bAVaren ordainketa',
+ 'f.I:auszform.o1': 'kapitala',
+ 'f.I:auszform.o2': 'biziarteko errenta',
+ 'f.I:teilkap.label': 'Altersvorsorgedepot: hasierako zenbateko bakarra',
+ 'f.I:av_auszform.label': 'Altersvorsorgedepot: gainerakoa',
+ 'f.I:av_auszform.o1': 'ordainketa-plana',
+ 'f.I:av_auszform.o2': 'biziarteko errenta',
+ 'f.I:agz_fix_min.label': 'Ekarpen finkorako gutxieneko ekarpen propioa',
+ 'f.I:rentfak_av.label': 'Altersvorsorgedepot-en errenta-faktorea',
+ 'f.I:rentfak_av.unit': '€ 10.000 €-ko',
+ 'f.I:rentdyn_av.label': 'Kontuko errentaren igoera, urtekoa',
+ 'f.I:rentfak.label': 'bAVaren errenta-faktorea',
+ 'f.I:rentfak.unit': '€ 10.000 €-ko',
+ 'f.I:rentdyn.label': 'bAV errentaren igoera, urtekoa',
+ 'f.I:fuenftel.label': 'Bosten araua egiaztatu',
+ 'f.I:fuenftel.o0': 'ez (zuhurra)',
+ 'f.I:fuenftel.o1': 'bai',
+ 'f.I:planende.label': 'Konparazio-horizontea, adin honetaraino',
+ 'f.I:planende.unit': 'urte',
+ 'f.I:ausscheid.label': 'Lanetik irtetea',
+ 'f.I:ausscheid.unit': 'urte',
+ 'f.I:tzalter.label': 'Lanaldi partziala adin honetatik',
+ 'f.I:tzalter.unit': 'urte',
+ 'f.I:tzfaktor.label': 'Lanaldi partzialaren faktorea',
+ 'f.I:gsteig.label': 'Soldata-igoera, urtekoa',
+ 'f.I:stkl.label': 'Zerga-aitorpen mota',
+ 'f.I:stkl.o1': 'banaka',
+ 'f.I:stkl.o3': 'batera (zatiketa)',
+ 'f.I:partner.label': 'bikotekidearen zerga-oinarria',
+ 'f.I:kist.label': 'Eliza-zergaren tasa',
+ 'f.I:tarifanp.label': 'Tarifa-mugen egokitzea, urtekoa',
+ 'f.I:kinder.label': 'Seme-alaben kopurua',
+ 'f.I:kind_jahre.label': 'Seme-alaben sariduna diren urteak',
+ 'f.I:kind_jahre.unit': 'urte',
+ 'f.I:kinderlos.label': 'Seme-alabarik gabe (zaintza-aseguruaren gainordaina)',
+ 'f.I:kinderlos.o0': 'ez',
+ 'f.I:kinderlos.o1': 'bai',
+ 'f.I:k_bav.label': 'bAV produktuaren kostua, urtekoa',
+ 'f.I:k_av.label': 'Altersvorsorgedepot-en kostua, urtekoa',
+ 'f.I:k_priv.label': 'ETF kontu pribatuaren kostua, urtekoa',
+ 'f.I:infl.label': 'Inflazioa, urtekoa',
+ 'f.I:sonst_zve.label': 'erretiroko beste zerga-oinarri bat',
+ 'f.I:rente_br.label': 'legezko pentsio gordina, urtekoa',
+ 'f.P:bbg_rv.label': 'Pentsio-aseguruaren kotizazio-muga (urtekoa)',
+ 'f.P:bbg_kv.label': 'Osasun- eta zaintza-aseguruaren kotizazio-muga',
+ 'f.P:bezug.label': 'Bezugsgröße (hilekoa)',
+ 'f.P:de_rv.label': 'Batez besteko soldata (RV)',
+ 'f.P:rw.label': 'Pentsio-puntuaren uneko balioa',
+ 'f.P:rw.unit': '€',
+ 'f.P:rv_an.label': 'Pentsio-kotizazioa, langilearen zatia',
+ 'f.P:av_an.label': 'Langabezia-kotizazioa, langilearen zatia',
+ 'f.P:kv_allg.label': 'Osasun-aseguruaren tasa orokorra',
+ 'f.P:kv_zus.label': 'Osasun-aseguruaren batez besteko kotizazio gehigarria',
+ 'f.P:pv_ges.label': 'Zaintza-aseguruaren tasa osoa',
+ 'f.P:pv_an.label': 'Zaintza-asegurua, langilearen zatia',
+ 'f.P:pv_kl.label': 'Zaintza-asegurua, seme-alabarik gabekoen gainordaina',
+ 'f.P:gfb.label': 'Oinarrizko salbuespena (1. gunearen amaiera)',
+ 'f.P:e2.label': '2. gunearen amaiera',
+ 'f.P:e3.label': '3. gunearen amaiera',
+ 'f.P:e4.label': '5. gunearen hasiera (aberatsen zerga)',
+ 'f.P:a2.label': 'a₂ koefizientea',
+ 'f.P:b2.label': 'b₂ koefizientea',
+ 'f.P:a3.label': 'a₃ koefizientea',
+ 'f.P:b3.label': 'b₃ koefizientea',
+ 'f.P:c3.label': 'c₃ konstantea',
+ 'f.P:c4.label': 'c₄ konstantea',
+ 'f.P:c5.label': 'c₅ konstantea',
+ 'f.P:soli.label': 'Elkartasun-gainordaina',
+ 'f.P:soli_fg.label': 'Gainordainaren salbuespen-muga',
+ 'f.P:soli_mz.label': 'Leuntze-gunearen muga-karga',
+ 'f.P:an_pausch.label': 'Langileen tanteko kenkaria',
+ 'f.P:sa_pausch.label': 'Gastu berezien tanteko kenkaria',
+ 'f.P:kapst.label': 'Kapital-zergaren tasa',
+ 'f.P:tfs.label': 'Akzio-funtsen salbuespen partziala',
+ 'f.P:sparerpb.label': 'Aurreztailearen tanteko kenkaria',
+ 'f.P:basiszins.label': 'Vorabpauschale-ren oinarrizko interesa',
+ 'f.P:vp_faktor.label': 'Oinarrizko etekinaren faktorea',
+ 'f.P:st_frei_q.label': 'zergarik gabe § 3 Nr. 63 (BBG-RVren zatia)',
+ 'f.P:sv_frei_q.label': 'kotizaziorik gabe (BBG-RVren zatia)',
+ 'f.P:zul_g1.label': 'Saria, 1. maila (ekarpen propioaren € bakoitzeko)',
+ 'f.P:zul_s1.label': '1. mailaren muga',
+ 'f.P:zul_g2.label': 'Saria, 2. maila (ekarpen propioaren € bakoitzeko)',
+ 'f.P:zul_s2.label': '2. mailaren muga',
+ 'f.P:kind_zul.label': 'Seme-alaba bakoitzeko saria',
+ 'f.P:av_max.label': 'Urteko gehieneko ekarpena',
+ 'f.P:av_sa_max.label': '§ 10a kenkariaren gehienekoa',
+ 'f.P:ertragsq.label': 'Etekin-zatia (67 urte)',
+ 'f.P:halb.label': 'diferentzia-zenbatekoaren zati zergapegarria',
+
+ /* ---------------- Markoa, leihoen izenburuak ---------------- */
+ 'app.title': 'Erretiro-aurreikuspenen konparaketa',
+ 'hdr.title': 'Erretiro&#8209;aurreikuspenen konparaketa',
+ 'win.header': 'Erretiro-aurreikuspenen konparaketa',
+ 'win.result': 'Emaitza',
+ 'win.input': 'Zure datuak',
+ 'win.chart': 'Diagramak',
+ 'win.extra': 'Datu gehiago',
+ 'win.calc': 'Kalkulu-bidea',
+ 'win.share': 'Gorde eta partekatu',
+ 'win.min': 'Minimizatu',
+ 'win.restore': 'Leheneratu',
+ 'win.n': function(p){ return p.n + '. leihoa'; },
+ 'ui.share': 'Kopiatu nire zenbakiak dituen esteka',
+ 'ui.export': 'Gorde fitxategi gisa',
+ 'ui.import': 'Kargatu fitxategia',
+ 'ui.reset': 'Dena berrezarri',
+ 'ui.pin.set': 'Gorde erreferentzia gisa',
+ 'ui.pin.clear': 'Kendu erreferentzia',
+ 'ui.lang': 'Hizkuntza',
+ 'ui.lang.aria': 'Aukeratu hizkuntza',
+ 'ui.lang.partial': 'partzialki itzulia soilik',
+ 'ui.lang.partialNote': 'Hizkuntza hau <b>partzialki itzulia</b> dago: interfazea, eremuen izenak, taulen goiburuak eta diagrameten legendak hor daude. Azalpen juridiko luzeak — eremuetako <span class="qm" style="cursor:default">?</span> testuak, ondorioa eta kalkulu-bidea — alemanez agertzen dira. Lege-aipamenak (BetrAVG, EStG, SGB V) hizkuntza guztietan alemanez daude: ofizialki ez dira beste era batera existitzen.',
+ 'sb.up': 'Gora, emaitzara',
+
+ /* ---------------- Hiru aukerak ---------------- */
+ 'opt.bav.name': 'bAV (soldata-bihurketa)',
+ 'opt.bav.short': 'bAV',
+ 'opt.bav.nom': 'enpresa-pentsioa',
+ 'opt.bav.satz': 'Enpresa-pentsioa',
+ 'opt.bav.gen': 'bAVaren',
+ 'opt.av.name': 'Altersvorsorgedepot',
+ 'opt.av.short': 'AV kontua',
+ 'opt.av.nom': 'Altersvorsorgedepot',
+ 'opt.av.satz': 'Altersvorsorgedepot',
+ 'opt.av.gen': 'Altersvorsorgedepot-en',
+ 'opt.priv.name': 'ETF kontu pribatua',
+ 'opt.priv.short': 'pribatua',
+ 'opt.priv.nom': 'ETF kontu pribatua',
+ 'opt.priv.satz': 'ETF kontu pribatuak',
+ 'opt.priv.gen': 'ETF kontu pribatuaren',
+
+ /* ---------------- Adierazleak ---------------- */
+ 'metric.monat.label': 'Hileko prestazioa',
+ 'metric.monat.unit': '€/hilabete',
+ 'metric.ertrag.label': 'Etekin garbia (gaurko balioa)',
+ 'metric.ertrag.unit': '€',
+ 'metric.irr.label': 'Barne-errendimendu tasa',
+ 'metric.irr.unit': '% urtean',
+ 'metric.kapital.label': 'Kapitala erretiroaren hasieran',
+ 'metric.kapital.unit': '€',
+ 'metric.pa': ' urtean',
+ 'metric.pp': ' pp.',
+ 'metric.short.monat': 'Hilabete',
+ 'metric.short.ertrag': 'Etekina',
+ 'metric.short.irr': 'BET',
+ 'metric.short.kapital': 'Kapitala',
+
+ /* ---------------- Sarrera-eremuak, markoa ---------------- */
+ 'unit.pct': '%',
+ 'unit.eur': '€',
+ 'unit.eurm': '€/hilabete',
+ 'ui.hintFor': function(p){ return 'Azalpena: ' + p.label; },
+ 'ui.cnt.legal': function(p){ return p.n + ' kalkulu-magnitude'; },
+ 'ui.cnt.fields': function(p){ return p.n + ' eremu'; },
+ 'group.bav': 'Ekarpena eta ordainketa-moduak xehetasunez',
+ 'group.person': 'Denbora-ardatza, irtetea, lanaldi partziala',
+ 'group.steuer': 'Zerga, aitorpena, seme-alabak',
+ 'group.markt': 'Kostuak eta inflazioa',
+ 'group.ruhe': 'Erretiroa',
+ 'group.p_sv': 'Kalkulu-magnitudeak: gizarte-segurantza 2026',
+ 'group.p_est': 'Kalkulu-magnitudeak: errenta-zergaren tarifa 2026 (§ 32a EStG)',
+ 'group.p_kap': 'Kalkulu-magnitudeak: kapital- eta inbertsio-zerga',
+ 'group.p_bav': 'Kalkulu-magnitudeak: enpresa-pentsioa eta diruz lagundutako pentsio pribatua',
+
+ /* ---------------- Emaitza-txartelak ---------------- */
+ 'card.lead': 'aurretik',
+ 'card.unchanged': 'aldatu gabe',
+ 'base.pinned': 'Δ gordetako egoerarekiko',
+ 'base.delta': function(p){ return 'Δ ' + p.desc; },
+ 'base.none': 'Mugitu graduatzaile bat — aldaketa hemen agertuko da Δ gisa.',
+ 'base.desc.prev': 'aurreko egoera',
+ 'base.desc.pinned': 'gordetako egoera',
+ 'base.desc.change': function(p){ return '„' + p.label + '“ aldatu aurretik'; },
+ 'verdict.pp': function(p){ return p.v + ' ehuneko puntu'; },
+
+ /* ---------------- Barra mugikorra ---------------- */
+ 'sb.cap': function(p){ return p.label + ' · ' + p.unit + (p.kaufkraft ? ', gaurko erosteko ahalmenean' : ''); },
+ 'sb.aria': function(p){ return 'Emaitza: ' + p.label; },
+
+ /* ---------------- Diagramak ---------------- */
+ 'tab.sens': 'Sentikortasuna',
+ 'tab.wf': 'Balio-eragileak',
+ 'tab.kap': 'Kapitalaren bilakaera',
+ 'tab.zer': 'Hileko deskonposaketa',
+ 'chart.error': function(p){ return 'Diagrama ezin da erakutsi: ' + p.msg; },
+ 'sens.legendY': function(p){ return 'y: ' + p.label + ' (' + p.unit + ')'; },
+ 'wf.up': 'etekina igotzen du',
+ 'wf.down': 'etekina jaisten du',
+ 'wf.legend': 'Etekin garbiaren gaurko balioa, gaurko erosteko ahalmenean',
+ 'wf.barinfo': function(p){ return p.label + ': ' + p.note; },
+ 'wfb.vp.label': 'Vorabpauschale desagertzea',
+ 'wfb.zul.label': 'Sariak eta gastu berezien kenkaria',
+ 'wfb.arch.label': 'Zergapetze-arkitektura (gainerakoa)',
+ 'wfb.agz.label': 'Enplegatzailearen ekarpena',
+ 'wfb.tarif.label': 'Tarifa-arbitrajea eta gainerakoa',
+ 'wfb.kvpv.label': 'Osasun-/zaintza-asegurua Versorgungsbezüge-ren gainean',
+ 'wfb.ep.label': 'Pentsio-puntuen galera',
+ 'kap.rentbeg': 'Erretiroaren hasiera',
+ 'kap.swap': 'Kapitala → errenta-eskubidea',
+ 'kap.legend': 'marra jarraitua: guztira &nbsp;·&nbsp; marra etena: libreki erabilgarri',
+ 'zer.netto': 'garbia',
+ 'zer.tax': 'zerga',
+ 'zer.kv': 'osasuna/zaintza',
+ 'zer.pension': 'pentsioa',
+ 'zer.legend': '<span><i style="background:#808080"></i>zerga</span><span><i style="background:#800000"></i>osasuna/zaintza</span><span><i style="background:#800080"></i>galdutako legezko pentsioa</span><span style="margin-left:auto">oinarri koloreduna = geratzen dena</span>',
+
+ /* ---------------- Kalkulu-bidea ---------------- */
+ 'det.h.bav': 'bAV',
+ 'det.h.av': 'AV kontua',
+ 'det.h.priv': 'pribatua',
+ 'det.h.kennzahl': 'Adierazlea',
+ 'det.h.wert': 'Balioa',
+ 'det.erg.netto': 'Garbitik ordaindutako guztira (nominala)',
+ 'det.erg.fremd': 'Kanpoko dirua (ekarpena edo sariak)',
+ 'det.erg.kapital': 'Kapitala ordainketaren hasieran',
+ 'det.erg.brutto': 'Ordainketa gordinen batura',
+ 'det.erg.steuer': 'horietatik errenta-/kapital-zerga',
+ 'det.erg.kvpv': 'horietatik osasun- eta zaintza-asegurua',
+ 'det.erg.rentenverlust': 'Legezko pentsioaren galera (metatua)',
+ 'det.erg.nettoausz': 'Ordainketa garbien batura (nominala)',
+ 'det.erg.bwausz': 'Ordainketa garbien gaurko balioa',
+ 'det.erg.bwaufw': 'Gastu garbiaren gaurko balioa',
+ 'det.erg.ertrag': 'Etekin garbiaren gaurko balioa',
+ 'det.erg.verhaeltnis': 'Etekinaren eta gastuaren arteko erlazioa',
+ 'det.erg.irr': 'Barne-errendimendu tasa (nominala)',
+ 'det.erg.vorsprung': 'Kontu pribatuarekiko abantaila',
+ 'det.mon.brutto': 'Hileko prestazio gordina',
+ 'det.mon.steuer': 'ken errenta-/kapital-zerga',
+ 'det.mon.kvpv': 'ken osasun- eta zaintza-asegurua',
+ 'det.mon.ep': 'ken legezko pentsioaren galera',
+ 'det.mon.netto': 'HILEKO GARBIA (gaurko erosteko ahalmenean)',
+ 'det.diag.beitrag': 'Hileko bAV ekarpen gordina',
+ 'det.diag.aufwand': 'Hileko gastu garbia (lehen urtea)',
+ 'det.diag.grenzsteuer': 'Muga-zerga tasa metatze-fasean (lehen urtea)',
+ 'det.diag.ersparnis': 'Aurrezki-tasa osoa (zerga + kotizazioak), lehen urtea',
+ 'det.diag.svAG': 'enplegatzailearen benetako kotizazio-aurrezkia',
+ 'det.diag.svAN': 'langilearen benetako kotizazio-aurrezkia',
+ 'det.diag.ngef': 'Diru-laguntzarik gabeko bAV ekarpenen zatia (lehen urtea)',
+ 'det.diag.aussch': 'Legezko eskubidearen erabilera (BBG-RVren % 4)',
+ 'det.diag.agzVar': 'horietatik enplegatzailearen ekarpena: ehunekotan (lehen urtea)',
+ 'det.diag.agzFix': 'horietatik enplegatzailearen ekarpena: zenbateko finkoa (lehen urtea)',
+ 'det.diag.agzFixUeber4': '% 4ko ontzitik gorako ekarpen finkoa (ez da kotizazio-karga gisa jaso)',
+ 'det.diag.vbMonat': 'Hileko Versorgungsbezug ordainketaren hasieran',
+ 'det.diag.freibetrag': 'Versorgungsbezüge-ren salbuespena urte berean',
+ 'det.diag.vbQuote': 'Versorgungsbezug-en eta salbuespenaren arteko erlazioa',
+ 'det.diag.kapFreiKapital': 'kotizaziorik gabe posible den kapitala (kapital-ordainketa)',
+ 'det.diag.kapFreiRente': 'kotizaziorik gabe posible den kapitala (biziarteko errenta)',
+ 'det.diag.memoRest': 'OHARRA: horizontearen ondorengo bAV errenta-ordainketak',
+ 'det.diag.memoRestAv': 'OHARRA: horizontearen ondorengo kontu-errenta',
+ 'det.diag.wiederanl': 'Zergen ondorengo berrinbertsio-interesa',
+ 'det.diag.kapstEff': 'kapital-zerga efektiboa, gainordaina eta eliza-zerga barne',
+ 'det.diag.bestAnteil': 'Legezko pentsioaren zati zergapegarria',
+ 'det.anspar.h.jahr': 'Urtea',
+ 'det.anspar.h.brutto': 'Gordina',
+ 'det.anspar.h.beitrag': 'bAV ekarpena',
+ 'det.anspar.h.agzVar': 'Enpl. ekarp. %',
+ 'det.anspar.h.agzFix': 'Enpl. finkoa',
+ 'det.anspar.h.sv': 'Kotiz. aurrezk.',
+ 'det.anspar.h.st': 'Zerga aurrezk.',
+ 'det.anspar.h.netto': 'Gastu garbia',
+ 'det.anspar.h.zul': 'Sariak',
+ 'det.anspar.h.kbav': 'Kapitala bAV',
+ 'det.anspar.h.kav': 'Kapitala AV',
+ 'det.anspar.h.kpriv': 'Kapitala pribatua',
+ 'det.row.year': function(p){ return p.jahr + ' (' + p.alter + ' urte)'; },
+ 'det.ausz.h.jahr': 'Urtea',
+ 'det.ausz.h.bavBr': 'bAV gordina',
+ 'det.ausz.h.kvpv': 'osasuna/zaintza',
+ 'det.ausz.h.steuer': 'Zerga',
+ 'det.ausz.h.mind': 'Pentsio-murrizketa',
+ 'det.ausz.h.bavNet': 'bAV garbia',
+ 'det.ausz.h.avBr': 'AV gordina',
+ 'det.ausz.h.avNet': 'AV garbia',
+ 'det.ausz.h.privBr': 'pribatua gordina',
+ 'det.ausz.h.privNet': 'pribatua garbia',
+ 'det.ann.h.annahme': 'Hipotesia',
+ 'det.ann.h.vertrauen': 'Konfiantza',
+ 'det.ann.h.anmerkung': 'Oharra',
+ 'det.ann.r1.a': 'Gizarte-segurantzako magnitudeak 2026, § 32a tarifa 2026',
+ 'det.ann.r1.c': 'SVBezGrV 2026, Steuerfortentwicklungsgesetz',
+ 'det.ann.r2.a': 'Osasun-/zaintza-kotizazioaren betebeharra Versorgungsbezüge-ren gainean',
+ 'det.ann.r2.c': '§§ 229, 250 SGB V',
+ 'det.ann.r3.a': 'Salbuespena § 226 Abs. 2 S. 2 SGB V (osasuna)',
+ 'det.ann.r3.c': 'eztabaidaezina',
+ 'det.ann.r4.a': 'Atalasea salbuespenaren ordez zaintza-aseguruan',
+ 'det.ann.r4.c': 'aholku-testuetako akats-iturri ohikoena',
+ 'det.ann.r5.a': 'AV kontuko ordainketaren kotizazio-salbuespena',
+ 'det.ann.r5.c': 'ez dira Versorgungsbezüge',
+ 'det.ann.r6.a': 'Diferentzia-zenbatekoaren erdia diruz lagundu gabeko geruzetarako',
+ 'det.ann.r6.c': '§ 22 Nr. 5 S. 2 Buchst. b i.V.m. § 20 Abs. 1 Nr. 6 S. 2 EStG',
+ 'det.ann.r7.a': 'Ekarpena enplegatzailearen benetako aurrezkiraino soilik',
+ 'det.ann.r7.c': 'kontrako iritziak % 15 tanteko huts gisa irakurtzen du',
+ 'det.ann.r8.a': 'Gastu berezien gehienekoa 2.340 €',
+ 'det.ann.r8.c': 'EREDUAREN HIPOTESIA. Erabakitzen du seme-alaba batek AV kontuaren balioa igo ala jaisten duen',
+ 'det.ann.r9.a': 'Erretiroan KVdR derrigorrezko asegurua suposatzen da',
+ 'det.ann.r9.c': 'borondatezko aseguratuak ez dira aztertu',
+ 'det.t.prinzip': 'Konparazio-printzipioa',
+ 'det.t.erg': 'Emaitza xehetasunez',
+ 'det.t.mon': 'Hileko prestazioa, deskonposatuta',
+ 'det.t.diag': 'Diagnostikoa',
+ 'det.t.anspar': 'Metatze-fasea, urtez urte',
+ 'det.t.ausz': 'Ordainketa-fasea, urtez urte',
+ 'det.t.ann': 'Hipotesien sendotasuna',
+
+ /* ---------------- Gorde eta partekatu ---------------- */
+ 'msg.loaded': 'Kargatuta.',
+ 'msg.loadError': function(p){ return 'Fitxategia ezin izan da irakurri: ' + p.msg; },
+ 'msg.reset': 'Oinarrizko kasura berrezarrita.',
+
+ /* ---------------- PWA ---------------- */
+ 'pwa.installBtn': 'Instalatu',
+ 'pwa.installed': '<b>Instalatuta.</b> Aplikazioa zure gainerako aplikazioen artean aurkituko duzu orain.',
+
+ /* ---------------- Eremuetako azalpenak (?) ---------------- */
+ 'f.I:gehalt.hint': 'Ordainketa bakarrik gabe, hala badagokio 13. soldataren zati proportzionala barne. Zure muga-zerga tasa zehazten du, baita kotizazio-mugen gainetik zauden ere.',
+ 'f.I:beitrag.hint': 'Soldata gordinaren bihurketa § 1a BetrAVG artikuluaren arabera. Legezko eskubidea RV kotizazio-mugaren % 4ra arte soilik dago; horretatik gora enplegatzailearen onarpena behar da.',
+ 'f.I:netto_ziel.hint': 'Zure diru-sarrera erabilgarria lehen urtean murrizten den zenbatekoa — benetan bertan behera utzitako kontsumoa, eta beraz erabaki-aldagai ekonomikoki zuzena. Zenbateko hori bera inbertitzen da hiru aukeretan; hori da konparazio zuzen baten baldintza. Gaineko ekarpen gordinarekin era bakarrean lotuta dago: N(B) = B − gizarte-segurantzako aurrezkia − zerga-aurrezkia hertsiki gorakorra da, beraz alderantzikagarria. Kotizazio-mugetan eta tarifa-mugetan dauden malguneen ondorioz ez da forma itxian ebazten, hortaz 34 bitan-zatiketa — zehaztasuna zentimo baten hamarrena baino handiagoa.',
+ 'f.I:agzus.hint': 'Legezko gutxienekoa % 15 (§ 1a Abs. 1a BetrAVG); enplegatzaile askok gehiago ordaintzen dute. Kontu pribatuarekiko break-even puntua gutxi gorabehera (1+z)·(1−0,211) ≈ 1 den lekuan dago, hau da z ≈ % 26,7 — sentikortasun-kurbarekin egiazta daiteke. „Benetako aurrezkia“ ekarpen moduan balio hori askotan lortezina da, ekarpena lehenago asetzen delako.',
+ 'f.I:agz_fix.hint': 'Zenbatekoarekiko independentea den ekarpen finkoa, hitzarmen kolektibotik edo enpresa-akordiotik dator — Deutsche Bahn-en eta hitzarmen askotan ohikoa, han § 1a Abs. 1a BetrAVG-ren araberako % 15az gain. Enplegatzaileak finantzatutako oparia da § 3 Nr. 63 EStG-ren arabera, eta % 8ko ontzia eta % 4ko kotizaziorik gabeko muga (§ 1 Abs. 1 S. 1 Nr. 9 SvEV) LEHENTASUNEZ betetzen ditu: zure bihurketa propioa horrenbestez baztertuta gelditzen da eta garestiagoa da. Ekonomikoki oinarri bat da, ez palanka bat: hurrengo ekarpen-euroaren muga-errendimendua ez du aldatzen (∂²etekina/∂agz_fix∂ekarpena ≤ 0, baztertzearen bidez are jaits dezake), batez bestekoa berriz nabarmen igotzen du. Sentikortasun-kurban horregatik ia afina da — % 4ko edo % 8ko ontzia agortu arte, orduan kurba tolesten da.',
+ 'f.I:agz_fix_dyn.hint': 'Zenbateko finkoak gehienetan nominalean agertzen dira hitzarmen kolektiboan eta hitzarmen-negoziazio garaietan bakarrik igotzen dira — lehenetsitako balioa horregatik „nominalean konstante“. % 2ko inflazioarekin 27 urtetan zehar horretatik 1,02⁻²⁷ ≈ 0,59 faktorea gelditzen da; hori pesimista gehiegi iritzitakoak „soldatarekin batera“ aukeratzen du eta gsteig − infl hazkunde-tasa duen ekarpen erreal bat lortzen du.',
+ 'f.I:agzus_sv.hint': '„Benetako aurrezkia“ legearen hitzez hitzezko testua da: § 1a Abs. 1a BetrAVG-k ekarpena zor du enplegatzaileak gizarte-segurantzako kotizazioetan BENETAN aurrezten duen NEURRIAN soilik. Zure ordainsaria bi kotizazio-mugen gainetik badago, ez du ezer aurrezten eta ez du ezer zor. Hortaz graduatzailea oinarrizko kasuan % 21 inguruan asetzen da. „Ekarpen osoa“ borondatezko edo hitzarmen kolektiboko konpromiso bat da, „salbuetsitako zatia soilik“ berriz zabalduta dagoen praktika tantekoa. „Benetako“ interpretazioaren konfiantza-maila % 75 ingurukoa da.',
+ 'f.I:dyn.hint': 'Ekarpena soldata-igoerarekin batera igotzen bada, % 8ko ontziaren erabilera urteetan zehar gutxi gorabehera konstante mantentzen da. Nominalean konstante mantentzen bada, bere balio erreala inflazioarekin jaisten da — eta konparaziorako beste bi aukerek jasotzen duten gastu garbia ere jaisten da horrekin batera.',
+ 'f.I:rendite.hint': 'Kostuen aurretik, zergen aurretik. Hiru aukeretan ETF bera — horrela soilik konparatzen dira laguntza-arkitekturak, ez inbertsio-erabakiak.',
+ 'f.I:alter.hint': 'Metatze-fasearen hasiera-puntua. Egutegi-urtea 0 = 2026.',
+ 'f.I:rentbeg.hint': 'Hiru aukeren ordainketa-fasearen hasiera. Altersvorsorgedepot gehienez 65 urterekin ordain daiteke (2026ko erreforma).',
+ 'f.I:kv_ruhe.hint': 'Palanka erabakigarria. Legezko osasun-aseguruan enpresa-pentsioak Versorgungsbezüge dira eta kotizazio-tasa osoa daramate (§§ 229, 250 SGB V); pentsio pribatuak ez. Ezarpen horrek bakarrik itzultzen du emaitza.',
+ 'f.I:auszform.hint': 'Kapitala: sarrera-urtean guztiz zergapetua, osasun-aseguruko kotizazioak 120 hilabetetan banatuta (§ 229 Abs. 1 S. 3 SGB V). Errentak jasotzea bizitza osoko gainerako denboran zabaltzen du, eta hortaz kapital askoz handiagoa babesten du salbuespen berdinaren pean. Ereduak guztiz edo ezer ez soilik ezagutzen du; bAV-ren kapitalizazio partziala ez da modelizatu.',
+ 'f.I:teilkap.hint': 'Aurreztutako kapitalaren % 30era arte, ordainketa-fasearen hasieran zenbateko bakar gisa posible da — bi ordainketa-moduetan. Bi arrazoirengatik kostua du: sarrera-urtean progresio osoa eta gero soilik kapital-zergaren ondorengo interes-tasa. Urteko gehienekoa gainditzen duen soberakina («sleeve») zenbateko bakarrik gabe errentifikatzen da; hori eredu-konbentzioa da, ez legezko araua.',
+ 'f.I:av_auszform.hint': 'Zenbateko bakarraz haratago dagoen kapitalari zer gertatzen zaion — horren gaineko bAV-erabakitik independenteki. Ordainketa-plana: dirua inbertituta jarraitzen du eta interesekin ateratzen da; diruz lagundu gabeko geruza diferentzia-zenbatekoaren erdiarekin zergapetzen da. Biziarteko errenta: kapitala hornitzaileari doa, horren truke diruz lagundu gabeko geruza etekin-zatiarekin soilik zergapetzen da (§ 22 Nr. 5 S. 2 Buchst. a EStG, % 17 67 urtetik aurrera, hemen % 26 inguru izan beharrean). Diruz lagundutako geruza bi kasuetan guztiz atzeratutako zergapetzea du, hori ez da aldatzen.',
+ 'f.I:agz_fix_min.hint': 'Parekatze-ereduek zenbateko finkoa gutxieneko ekarpen propio bati lotzen diote («gutxienez X bihurtzen duenak Y jasotzen du»). 0 balioak baldintzarik gabe esan nahi du — orduan ekarpena urte aktibo bakoitzean iristen da, ekarpena zero izan arren. Kontuz eredu-semantikarekin: benetan baldintzarik gabeko ekarpen bat ez litzateke bihurketa-erabakiaren diferentzia-efektu bat izango, eta konparaketan bAVren alde kontabilizatuko litzateke, bihurketarik gabe ere iritsiko litzatekeen arren. Idatzi bakarrik parte-hartzearekin benetan lotuta dagoena.',
+ 'f.I:rentfak_av.hint': 'Kontua errentifikatzen bada soilik. bAVn bezala lehenetsita dago; kontu-kontratu batek ez du asegurantza-egiturarik behar, eta hortaz merkeagoa izan daiteke — sartu eskaintza zehatzetik datorren balioa. 0 denean, ez dago errentarik.',
+ 'f.I:rentdyn_av.hint': 'Etekin-partaidetza edo funtsaren bilakaera kontu-kontratuaren errenta-fasean.',
+ 'f.I:rentfak.hint': '«Errenta» ordainketa-modua denean soilik. 10.000 €-ko 26 €-ko hileko errenta % 3,1eko atera-tasaren baliokidea da gutxi gorabehera. Produktu-informazio orrian agertzen da.',
+ 'f.I:rentdyn.hint': 'Etekin-partaidetza edo funtsaren bilakaera errenta-fasean.',
+ 'f.I:fuenftel.hint': '§ 34 EStG § 3 Nr. 63 kontratuetatik datozen kapital-ordainketa planifikatuetan salbuespenez soilik aplikatzen da, BFH X R 23/15 arabera. Kontserbadoreki: ez.',
+ 'f.I:planende.hint': 'Ordainketa-planek hemen arte irauten dute. Biziarteko errentak horizonte berean konparatzen dira; hortik aurrera fluitzen jarraitzen duena «Diagnostikoa» azpian ohar gisa agertzen da. Zaharra izatera iristen denak irabazten du hor.',
+ 'f.I:ausscheid.hint': 'Hemendik aurrera ez soldatarik ez ekarpenik gehiago. Kapitalak interesa sortzen jarraitzen du ordainketaren hasierara arte.',
+ 'f.I:tzalter.hint': 'Ordainketaren hasieratik aurrerako edozein balioak esan nahi du: lanaldi partzialik ez. Lehenetsia horregatik 67 da.',
+ 'f.I:tzfaktor.hint': 'Lanaldi osoko soldataren zatia. % 60 = % 60eko lanpostua.',
+ 'f.I:gsteig.hint': 'Kotizazio-mugak, Bezugsgröße, batez besteko ordainsaria eta pentsio-balioa ere aurrera eramaten ditu.',
+ 'f.I:stkl.hint': 'Erabakigarria AITORPEN MOTA da, ez soldata-zergaren klasea: klaseak urte barruko atxikipena bakarrik erregulatzen du, urteko likidazioak beti § 32a Abs. 5 EStG-ren araberako zatiketarekin kalkulatzen baitu. «Batera» aukeran nahitaez sartu behar da bikotekidearen zerga-oinarria.',
+ 'f.I:partner.hint': 'Aitorpen bateratuan soilik. Kalkulatzen dena: 2·ESt((zvE + zvE_bikotekidea)/2).',
+ 'f.I:kist.hint': '% 8 Bavieran eta Baden-Württemberg-en, bestela % 9, 0 elizatik irtenez gero. Kapital-zergan ere eragina du: 0,25/(1+0,25k)·(1+0,055+k).',
+ 'f.I:tarifanp.hint': 'Tarifa osoa λ = (1+x)^t faktorearekin luzatzen da: ESt = s·λ·T(zvE/s/λ). Hori zehazki baliokidea da mugarri guztien lekualdatze proportzional batekin. % 0k hoztasun progresio osoa erakusten du.',
+ 'f.I:kinder.hint': 'Seme-alaben saria Altersvorsorgedepot-en: sartutako € bakoitzeko 1 €, seme-alaba bakoitzeko 300 €ra arte.',
+ 'f.I:kind_jahre.hint': 'Seme-alaben saria haurrentzako diru-laguntzarako eskubidearekin lotuta dago (§ 85 EStG), hortaz ez da iraunkorra metatze-fase osoan zehar.',
+ 'f.I:kinderlos.hint': '% 0,6ko puntu gehigarria zaintza-aseguruan, langileak bakarrik ordaintzen duena (§ 55 Abs. 3 SGB XI).',
+ 'f.I:k_bav.hint': 'Asegurantza-egitura gehi TER. Kostu efektiboak produktu-informazio orrian daude — han begiratu, ez estimatu.',
+ 'f.I:k_av.hint': 'Kontu estandarrean kostu efektiboak legez % 1,0 urtean mugatuta daude.',
+ 'f.I:k_priv.hint': 'Mundu-mailako ETF zabal baten TER hutsa.',
+ 'f.I:infl.hint': '«Gaurko erosteko ahalmenean» adierazitako balio guztientzako deskontu-tasa. Ia ez du rankinga aldatzen, baina bai maila guztiak.',
+ 'f.I:sonst_zve.hint': 'Batez ere legezko pentsioaren zati zergapegarria, hemen konparatutako produktuak kanpo utzita. Ordainketa-faseko muga-zerga tasa zehazten du — eta hortaz t₀ − t₁ tarifa-arbitrajea.',
+ 'f.I:rente_br.hint': 'Osasun-aseguruko mugarako soilik: legezko pentsioak eta Versorgungsbezüge kotizazio-muga BAKARRA partekatzen dute (§ 223 Abs. 3 SGB V).',
+ 'f.P:bbg_rv.hint': 'SVBezGrV 2026 (BGBl. 2025 I Nr. 116), estatu osorako berdina.',
+ 'f.P:bbg_kv.hint': 'SVBezGrV 2026; hilean 5.812,50 €.',
+ 'f.P:bezug.hint': 'SVBezGrV 2026, urtean 47.460 €. Horren hogeiren bat da Versorgungsbezüge-rentzako salbuespena osasun-aseguruan (§ 226 Abs. 2 S. 2 SGB V).',
+ 'f.P:de_rv.hint': 'SGB VI-ren 1. eranskina, 2026ko balioa — pentsio-puntuen izendatzailea.',
+ 'f.P:rw.hint': 'Rentenwertbestimmungsverordnung 2026, 2026-7-1etik: 42,52 € (+% 4,24).',
+ 'f.P:rv_an.hint': '% 18,6, erdibana.',
+ 'f.P:av_an.hint': '% 2,6, erdibana.',
+ 'f.P:kv_allg.hint': '§ 241 SGB V.',
+ 'f.P:kv_zus.hint': 'BMG-ren jakinarazpena; kutxaren arabera aldatzen da — sartu zure kutxaren tasa.',
+ 'f.P:pv_ges.hint': '§ 55 SGB XI. Bigarren seme-alabatik aurrerako beherapenak ez dira modelizatu.',
+ 'f.P:pv_an.hint': 'Saxonian desberdina (% 2,3).',
+ 'f.P:pv_kl.hint': '§ 55 Abs. 3 SGB XI, langileak bakarrik.',
+ 'f.P:gfb.hint': '§ 32a Abs. 1 EStG, Steuerfortentwicklungsgesetz-en bertsioan.',
+ 'f.P:e2.hint': 'Muga-zerga tasa % 14tik % 23,97ra igotzen da.',
+ 'f.P:e3.hint': 'Muga-zerga tasa % 23,97tik % 42ra igotzen da.',
+ 'f.P:e4.hint': '277.826 €tik aurrera % 45 aplikatzen da.',
+ 'f.P:a2.hint': 'ESt = (a₂·y + b₂)·y, y = (zvE − oinarrizko salbuespena)/10.000 izanik.',
+ 'f.P:a3.hint': 'ESt = (a₃·z + b₃)·z + c₃, z = (zvE − 17.799)/10.000 izanik.',
+ 'f.P:c4.hint': 'ESt = 0,42·zvE − c₄.',
+ 'f.P:c5.hint': 'ESt = 0,45·zvE − c₅.',
+ 'f.P:soli.hint': 'SolzG 1995.',
+ 'f.P:soli_fg.hint': '2026, oinarrizko tarifa, ezarritako ESt-ari dagokiona; zatiketan bikoitza. Horrez gain leuntze-gune bat.',
+ 'f.P:soli_mz.hint': '§ 3 Abs. 2a SolzG.',
+ 'f.P:an_pausch.hint': '§ 9a S. 1 Nr. 1a EStG.',
+ 'f.P:sa_pausch.hint': '§ 10c EStG.',
+ 'f.P:kapst.hint': '§ 32d Abs. 1 EStG.',
+ 'f.P:tfs.hint': '§ 20 Abs. 1 Nr. 3 § 20 InvStG-rekin batera, % 50etik gorako akzio-funts proportzioa.',
+ 'f.P:sparerpb.hint': '§ 20 Abs. 9 EStG; zatiketan bikoiztu egiten da. Vorabpauschale-ren zati handi bat xurgatzen du — ikus balio-eragileak.',
+ 'f.P:basiszins.hint': '2026-1-13ko BMF-idazkia, § 18 Abs. 4 InvStG (2025: % 2,53). 0an ezartzeak esan nahi du: Vorabpauschale-rik ez.',
+ 'f.P:vp_faktor.hint': '§ 18 Abs. 1 S. 1 InvStG.',
+ 'f.P:st_frei_q.hint': 'BBG-RV-ren % 8 = 8.112 € 2026an.',
+ 'f.P:sv_frei_q.hint': '§ 1 Abs. 1 S. 1 Nr. 9 SvEV; % 4 = 4.056 € 2026an. Aldi berean § 1a BetrAVG-ren araberako legezko eskubidearen muga.',
+ 'f.P:zul_g1.hint': 'Altersvorsorgereformgesetz, 2026ko maiatzetik indarrean, aplikazioa 2027-1-1etik.',
+ 'f.P:zul_s1.hint': '360 €ko ekarpen propioa arte: 50 zentimo €ko.',
+ 'f.P:zul_g2.hint': '361etik 1.800 €ra: 25 zentimo €ko.',
+ 'f.P:zul_s2.hint': 'Diruz lagundutako ekarpen propioaren gehienekoa; gehienezko 540 €ko oinarrizko saria ematen du.',
+ 'f.P:kind_zul.hint': 'Sartutako € bakoitzeko 1 €, seme-alaba bakoitzeko 300 €ra arte.',
+ 'f.P:av_max.hint': 'Diruz lagundutako pentsio pribatuaren erreformari buruzko BMF-ren FAQ, 2026-5-5eko egoera. Horretatik gorakoa bide osagarri batetik doa, kontu pribatu gisa zergapetzen dena.',
+ 'f.P:av_sa_max.hint': 'EREDU-HIPOTESIA, konfiantza-maila % 70 ingurukoa. Ekarpen propioa 1.800 €ra arte gehi sariak. Zenbaki bakar honek erabakitzen du seme-alaba batek AV kontuaren balioa igotzen ala jaisten duen.',
+ 'f.P:ertragsq.hint': '§ 22 Nr. 1 S. 3 Buchst. a Doppelbuchst. bb EStG, diruz lagundu gabeko errenta-zatientzat.',
+ 'f.P:halb.hint': '§ 20 Abs. 1 Nr. 6 S. 2 EStG analogikoki (12 urte baino gehiagoko kontratua, 62 urtetik aurrerako ordainketa): diferentzia-zenbatekoaren erdia. Konfiantza-maila % 80 ingurukoa.',
+
+ /* ---------------- Testu orokorra, oina, adierazleak ---------------- */
+ 'app.meta': 'Enpresa-pentsioa, Altersvorsorgedepot eta ETF kontu pribatua gastu garbi berean konparatu. 2026ko egoera juridikoa.',
+ 'hdr.sub': 'Enpresa-pentsioa, Altersvorsorgedepot eta ETF kontu pribatua &mdash; <b>gastu garbi berean</b> eta ETF berarekin. 2026ko egoera juridikoa.',
+ 'input.sub': 'Zenbakiak berehala berkalkulatzen dira aldaketa bakoitzarekin. <span class="qm" style="cursor:default">?</span> ikurrarekin eremu bakoitzak bere burua azaltzen du.',
+ 'extra.sub': 'Hemen guztiak lehenespen zentzuzkoak ditu. Ukitu zuri dagokizunean bakarrik.',
+ 'calc.sub': 'Kalkulua jarraitu nahi duten guztientzat.',
+ 'share.sub': 'Zure datuak nabigatzaile honetan bakarrik daude (<kbd>localStorage</kbd>). Ez da ezer transmititzen, ez dago zerbitzaririk ez jarraipen-tresnarik.',
+ 'footer.1': '<b>Ez da zerga- edo inbertsio-aholkularitza.</b> Eredu bat ez da kontratu bat. Diruz lagundutako pentsio pribatu erreformatuari buruzko 2026ko egoera juridikoa ez dago puntu batzuetan behin betiko argituta; konfiantza-maila baxuena duten hipotesiak «Kalkulu-bidea → Hipotesien sendotasuna» azpian daude, eta han alda daitezke.',
+ 'footer.2': 'Kalkulu-nukleoa bat-batean <span class="pill">bAV-DYNO_vs_Altersvorsorgedepot_vs_ETF.xlsx</span> Excel ereduetik transferitu da, eta hiru test-kasuren aurrean egiaztatu da makina-zehaztasunarekin (desbideratze erlatibo handiena 1,3·10<sup>&minus;14</sup>).',
+ 'metric.monat.desc': 'Ordainketa-fase osoan zehar balio berarekin ordaintzen den hileko prestazio konstantea, gaurko erosteko ahalmenean. Zure gaurko diru-sarrera garbiarekin zuzenean konpara daitekeen zenbaki bakarra.',
+ 'metric.ertrag.desc': 'Aukerak gaurko erosteko ahalmenean, ekarpen propiotik haratago, zer ematen duen: ordainketa garbi guztien gaurko balioa ken gastu garbiaren gaurko balioa.',
+ 'metric.irr.desc': 'Benetan inbertitutako zenbateko garbiaren errendimendua, nominala. ETFaren ezarritako errendimendu gordinarekin zuzenean konparagarria — diferentzia laguntzek eta kenkariek batera zenbat kostatzen edo ematen duten da, hain zuzen.',
+ 'metric.kapital.desc': 'Zergen eta gizarte-segurantzako kotizazioen aurretik, nominala. Nahita EZ da erabaki-magnitudea: bAV askotan hemen gailentzen da, baina ordainketa-fasean galtzen du.',
+ 'ui.couple': '<span>⇅</span> Magnitude beraren bi ikuspegi. Bata aldatuz gero, besteak jarraitzen dio.',
+ 'ui.legalNote': 'Magnitude legalak iturriarekin. Zuzenbidea aldatu bada edo zure kutxa desberdina bada bakarrik aldatu.',
+
+ /* ---------------- Graduatzaileen ondoko ohar baldintzatuak ---------------- */
+ 'n.beitrag.ueber8': function(p, f){
+ return 'RV kotizazio-mugaren % 8tik gora (' + f.eur(p.v8) + ' urtean). Horretatik gorako '
+ + 'zatiak ez du ez zerga- ez gizarte-segurantza-onurarik — asegurantza-egitura batera doa '
+ + 'eta han osasun-aseguruko kotizazio-betebeharra bakarrik jasotzen du.'; },
+ 'n.beitrag.ueber4': function(p, f){
+ return 'RV kotizazio-mugaren % 4tik gora (' + f.eur(p.v4) + ' urtean). Hona arte § 1a '
+ + 'BetrAVG-ren araberako legezko eskubidea duzu, horretatik gora enplegatzailearen onarpena '
+ + 'behar da.'; },
+ 'n.agzus.gedeckelt': function(p, f){
+ return 'Goreneko muga: ' + f.pct(p.quote, 1) + '. Enplegatzaileak benetan urtean '
+ + f.eur2(p.ersparnis) + ' soilik aurrezten du — balio altuagoek ez dute ezer aldatzen '
+ + 'hemen, ekarpen-modua «benetako aurrezkia» den bitartean.'; },
+ 'n.agz_fix.fliesstNicht': function(p, f){
+ return 'Ez da iristen: zure hileko ekarpena, ' + f.eur2(p.beitrag) + ', «Datu gehiago» azpiko '
+ + 'gutxieneko atalasetik behera dago (' + f.eur2(p.schwelle) + ').'; },
+ 'n.agz_fix.ueber4': function(p, f){
+ return 'Ekarpen finkoak bakarrik gainditzen du % 4ko ontzia (' + f.eur(p.topf)
+ + ' urtean) ' + f.eur(p.ueber) + '-tan. Zati hori kotizazio-pekoa den lan-ordainsaria izango '
+ + 'litzateke zuretzat — ereduak kotizazio-karga gehigarria EZ du kontrako aldean kalkulatzen, '
+ + 'eta horrenbestez bAV gainbaloratzen du puntu horretan.'; },
+ 'n.agz_fix.verdraengung': function(p, f){
+ return '% 4ko ontzia lehentasunez betetzen du: zure ekarpen propiotik '
+ + f.eur(p.rest) + ' soilik geratzen da gizarte-segurantzatik salbuetsita. Zure gastu garbia '
+ + 'horregatik igotzen da — ekarpena, hala ere, opari-diru izaten jarraitzen du, zure '
+ + 'laguntza propioaren muga soilik lekualdatzen du.'; },
+ 'n.agz_fix.ueber8': 'Ekarpen propioarekin batera, BBG-RV-ren % 8tik gora — soberakinak ez du ez zerga- ez kotizazio-onurarik.',
+ 'n.agz_fix_min.knapp': function(p, f){
+ return 'Atalasetik ' + f.eur2(p.d) + ' gorago soilik zaude. Horren azpitik ekarpen finkoa '
+ + 'erabat desagertzen da: azken ekarpen-euroaren muga-errendimendua infinitua da hemen, '
+ + 'gordina ↔ garbia lotura etena da bertan.'; },
+ 'n.agz_fix_min.verfehlt': function(p, f){
+ return 'Atalasea ez da lortu — hilean ' + f.eur2(p.fehlt) + ' gehiago izanez gero, '
+ + f.eur2(p.zuschuss) + ' ekarpena aktibatzen da. Hori da, ia beti, eredu osoko euro '
+ + 'errentagarriena.'; },
+ 'n.teilkap.kosten': function(p, f){
+ return 'Kostua: ' + (p.gewinn ? 'ezer ez, aitzitik: ' + p.dtxt : p.dtxt + ' ' + p.unit)
+ + ', errentifikatze hutsarekin alderatuta. Arrazoia: zenbateko bakarra sarrera-urtean '
+ + 'guztiz zergapetua dago (muga-karga hor ' + f.pct(p.grenz, 1) + ') eta gero soilik '
+ + 'kapital-zergaren ondorengo tasarekin sortzen du interesa, produktuaren errendimenduarekin '
+ + 'beharrean.'; },
+ 'n.av_auszform.horizont': function(p, f){
+ return 'Konparazio-horizontea gaindituta, errenta honek oraindik ' + f.eur(p.rest)
+ + ' ordaintzen du, hemen KONTUAN HARTZEN EZ DENA. Horizonte finko batek sistematikoki '
+ + 'gutxiesten du biziarteko edozein errenta — zaharra izatera iristen denak irabazten du '
+ + 'hemen.'; },
+ 'rank.swap': function(p, f){
+ return '<b>Adierazleak ez datoz bat.</b> Hileko prestazioaren arabera '
+ + p.a + ' ' + p.b + '-ren aurretik dago, etekin garbiaren gaurko balioaren arabera '
+ + 'alderantziz da. Arrazoia: gaurko balioak inflazioarekin deskontatzen du ('
+ + f.pct(p.infl, 2) + '), hileko prestazioak berriz zergen ondorengo berrinbertsio-interesarekin '
+ + 'errentifikatzen du (' + f.pct(p.wiederanl, 2) + '). Bi horiek zenbat eta gehiago urrundu, '
+ + 'orduan eta hobeto geratzen da kapital-ordainketa goiztiar bat. Zein adierazlek balio duen, '
+ + 'dirua inbertituko zenukeen ala gastatuko zenukeen araberakoa da — «gastatu» kasuan, '
+ + '«ETF kontu pribatuaren kostuak» eremuko balioa ezarri, berrinbertsio-interesa zerorantz '
+ + 'joan dadin.'; },
+ 'warn.unreachable': 'Gastu garbi hori ez da lortzeko modukoa — zure soldata gainditzen du. Lortu daitekeen balio altuena ezarri da.',
+ 'warn.inactive': 'Lehen urtean, zure datuen arabera, jada ez zaude lanean — ez dago soldata-bihurketarik, beraz ez dago gastu garbirik ere, zeinetik ekarpen gordin bat alderantziz kalkulatu ahal izango litzatekeen. Egiaztatu «Lanetik irtetea» eta «Gaurko adina».',
+ 'verdict.lead': function(p){
+ return '<b>' + p.satz + '</b> ' + p.wert + '-rekin dago aurretik — ' + p.nom2 + ' baino ' + p.d2
+ + ' gehiago' + (p.nom3 ? ' eta ' + p.nom3 + ' baino ' + p.d3 + ' gehiago' : '') + '.'; },
+ 'verdict.top': function(p, f){
+ return ' ETF kontu pribatuarekiko ' + p.gen + ' aldearen zati handiena «' + p.label
+ + '» da — eta hain zuzen ' + (p.pro ? p.gen + ' alde' : p.gen + ' kaltetan') + ', '
+ + f.eur(p.wert) + ' gaurko balioarekin. Deskonposaketa osoa «Balio-eragileak» azpian dago.'; },
+ 'verdict.band': function(p, f){
+ return '<span class="band">Zenbaterainoko sendoa da hau? Errendimendu gordina ' + f.pct(p.lo, 1)
+ + ' izanez gero, ' + f.pct(p.mid, 1) + ' izan beharrean, ' + p.vlo + ' izango litzateke; '
+ + f.pct(p.hi, 1) + ' izanez gero, ' + p.vhi + '. Ordena '
+ + (p.stabil ? 'tarte honetan berdina mantentzen da.'
+ : '<b>tarte honetan alderantzikatu egiten da</b>, beraz emaitzak ez du hemen balio.')
+ + '</span>'; },
+ 'demo.text': '<b>Oraindik adibide-balioak dira</b> — 40 urte, urteko 75.000 €ko soldata gordina, hileko 300 €ko soldata-bihurketa, legezko osasun-aseguruarekin. Sartu «Zure datuak» azpian zure propioak; ohar hau bere kabuz desagertuko da orduan.',
+ 'sens.readout': 'Marra etena: zure uneko balioa. Eraztunak: kontu pribatuarekiko ebaki-puntuak. Kurbaren gainean pasatu edo ukitu balioak ikusteko.',
+ 'sens.note': function(p){
+ return 'Azkenengoz mugitutako graduatzailea bere tarte osoan kalkulatzen da — ' + p.n
+ + ' eredu-exekuzio oso. Une honetan: «' + p.label + '». '
+ + 'Beste graduatzaile bat mugituz gero, kurba aldatu egiten da harekin batera.'; },
+ 'sens.noteNetto': function(p, f){
+ return ' Kontuz: graduatzaile honek gastu garbia ere aldatzen du (hemen hileko '
+ + f.eur2(p.lo) + 'tik ' + f.eur2(p.hi) + 'ra) eta beraz hiru aukeretan inbertitzen den '
+ + 'zenbatekoa. Hortaz hiru kurbak x balio bakoitzean modu justuan konparagarriak dira, baina '
+ + 'desberdinak diren x balioen arteko maila ez. Malguneak kotizazio-mugetan daude ('
+ + f.eur(p.bbgkv) + ' KV/PVrako, ' + f.eur(p.bbgrv) + ' RV/AVrako) eta tarifa-mugetan.'; },
+ 'wf.check': function(p, f){
+ return 'Egiaztapena: ' + f.eur(p.start) + ' + ' + f.eur(p.summe) + ' = ' + f.eur(p.start + p.summe)
+ + ' (izan beharko luke ' + f.eur(p.ende) + ', desbideratzea ' + f.nf2(p.start + p.summe - p.ende) + ' €).'; },
+ 'wf.note': 'Deskonposaketa teleskopikoa, hortaz zehazki betetzen da — baina <b>ordenaren araberakoa</b> da: efektuak ez dira gehigarriki bereizgarriak, barra bakoitzak gainean daudenak <i>emanda</i> neurtzen du ekarpena. Ukitu barra bat eratorpena ikusteko.',
+ 'wfb.vp.note': 'Ez bAVk ez Altersvorsorgedepot-ek ez dute Vorabpauschale-rik ezagutzen (§ 18 InvStG). Kontu pribatua Vorabpauschale gabe ken Vorabpauschale-rekin gisa neurtua. Barra negatiboa izan daiteke: Vorabpauschale-ren zati handi bat aurrezle-kenkarira doa, baina kostu-oinarria bere osotasunean igotzen du — orduan kontu pribatuarentzat, garbi, abantaila bat da.',
+ 'wfb.zul.note': 'Kanpoko dirua saria-eredu berriaren arabera gehi § 10a EStG-ren araberako kenkaria. Bi laguntza-bide itzaliz neurtua.',
+ 'wfb.arch.note': 't₀ − t₁ tarifa-arbitrajea eta gainerako guztia. Hondarra zehaztuta dago, katea zehazki betetzeko.',
+ 'wfb.agz.note': 'Kanpoko dirua — bAVren abantaila estruktural bakarra, zerga-zuzenbidetik datorren ez dena. Ekarpena itzaliz neurtua.',
+ 'wfb.tarif.note': 'Sarreran muga-zerga tasa ken ateratzean, gehi gainerako guztia. Hondarra zehaztuta dago, katea zehazki betetzeko. Zerga-atzerapena, bakarrik, balio gabekoa da: (1−t)(1+r)ⁿ = (1+r)ⁿ(1−t), biderketa trukagarria da.',
+ 'wfb.kvpv.note': '§§ 229, 250 SGB V: kotizazio-tasa osoa erretiratuak bakarrik jasaten du. «Erretiroan osasun-asegurua pribatua» ezarpenarekiko diferentzia gisa neurtua.',
+ 'wfb.ep.note': 'Soldata-bihurketak kotizazio-pekoa den ordainsaria murrizten du, eta beraz legezko pentsioa. Garbi kontrako aldean kalkulatua.',
+ 'kap.readout': function(p, f){
+ return 'Erretiroaren hasieran lotuta: bAV ' + f.eur(p.bavGeb) + ' / ' + f.eur(p.bav)
+ + ' · AV kontua ' + f.eur(p.avGeb) + ' / ' + f.eur(p.av)
+ + ' · kontu pribatua ' + f.eur(0) + ' / ' + f.eur(p.priv)
+ + '. Hileko prestazio baliokidea kontsumitzen denez, aukera bakoitza zeroan amaitzen da.'; },
+ 'kap.note': function(p, f){
+ return 'Produktuko kontu-saldoa, ordainketa-fasean netean berrinbertitutako ordainketak '
+ + 'gehituta (' + f.pct(p.wiederanl, 2) + ' zergen ondoren) eta benetan kontsumitzen den '
+ + 'hileko prestazio baliokidea kenduta. Hortaz aukera bakoitza zehazki zerora iristen da. '
+ + 'Kontsumoa berrinbertsiotik bakarrik ateratzen denez eta produktuaren kapitala produktuan '
+ + 'bertan geratzen denez, non zergen aurreko produktu-errendimenduarekin hazten den, kurbak, '
+ + 'hala ere, ez dira proportzionalak. '
+ + '— Marra etenak libreki erabilgarri dagoen zatia adierazten du: bAV erretiroaren hasierara '
+ + 'arte guztiz lotuta dago (§ 1b BetrAVG-k eskubide-galera eza ezagutzen du, ez '
+ + 'erabilgarritasuna), Altersvorsorgedepot-en 65 urte baino lehenagoko atera bat laguntzarako '
+ + 'kaltegarria da eta urteko gehienekoa gainditzen duen soberakina bakarrik da librea, kontu '
+ + 'pribatua beti da librea. Hori da kapital-ordainketa bat ondo ikusten den ardatz bakarra. '
+ + (p.verrentet ? 'Kontua errentifikatzen duzunez, han ere kapitala hornitzaileari doa — kurba '
+ + 'horren arabera jaisten da, ezer galdu ez bada ere. ' : '')
+ + 'Eta berriro argi eta garbi: kurbek ERABAKI BAKAR honetatik sortutako ondarea erakusten '
+ + 'dute, ez zure ondare osoa.'; },
+ 'zer.readout': 'Guztia hileko prestazio konstante gisa, gaurko erosteko ahalmenean. Errentifikazioa lineala denez, blokeak zehazki batzen dira.',
+ 'zer.note': function(p, f){
+ return 'Erreferentzia-epea hiru aukeretan berdina da. Kapital-ordainketa bat ez da hamabitan '
+ + 'zatitzen, baizik eta zergen ondorengo berrinbertsio-interesarekin (' + f.pct(p.wiederanl, 2)
+ + ' urtean) epe berean errentifikatzen da. Kapitala inbertitu beharrean kontsumitzen duena, '
+ + 'okerrago geratzen da.'; },
+ 'det.warn.lead': 'Korridore lagunduetik kanpo zaude: ',
+ 'det.warn.aussch': '% 100eko erabileratik gora, ez dago jada soldata-bihurketarako legezko eskubiderik. ',
+ 'det.warn.ngef': 'Ekarpenen zati sumagarri batek ez du ez zerga- ez gizarte-segurantza-onurarik — geruza hori asegurantza-egitura batera doa, osasun-aseguruko kotizazio-betebeharraz gain ezer jaso gabe. ',
+ 'det.warn.vb': 'Versorgungsbezug-ek salbuespena nabarmen gainditzen du; salbuespen absolutuaren babes-eragina 1/kapital gisa jaisten da. ',
+ 'det.ann.intro': 'Ordena, 2026an oraindik guztiz argitu ez diren zuzenbide-galderen araberakoa da. Parentesi arteko zenbakiak konfiantza-maila subjektiboak dira.',
+ 'det.ann.notmodelled': '<b>Modelizatu gabe:</b> erretiro goiztiarreko murrizketak, soldata-bihurketak gaixotasun-, langabezia- eta guraso-diru-sarreran duen eragina, biziraupen-estaldura, kaudimengabezia-bermea (PSVaG), eramangarritasuna enplegatzailea aldatzean, zaintza-aseguruko haur-beherapenak, § 32d Abs. 6 EStG-ren araberako egokitasun-egiaztapena, enbargo- eta gutxieneko bermearen babesa, horizontetik haratagoko luzaera-arriskua.',
+ 'det.prinzip': '<p><i>Ekarpen gordinen</i> konparaketa bidegabea izango litzateke: soldata-bihurketa gordinetik dator, aurrezki pribatua garbitik. Horregatik <b>gastu garbia</b> berdintzen da:</p>'
+ + '<p style="font-family:var(--mono);font-size:.82rem;background:var(--chip);padding:9px 11px;border-radius:9px">Gastu garbia = Ekarpen gordina − Soldata-zergaren aurrezkia − langilearen gizarte-segurantzako aurreztutako zatia</p>'
+ + '<p>Zenbateko hori bera inbertitzen da hiru aukeretan. Geratzen dena <i>laguntza-arkitekturen</i> konparaketa bat da, ez sartutako zenbatekoena.</p>'
+ + '<p><b>Zerga-atzerapena, bere horretan, balio gabekoa da:</b> (1−t)·(1+r)ⁿ = (1+r)ⁿ·(1−t). Biderketa trukagarria da. Lau balio-eragile soilik geratzen dira:</p>'
+ + '<ol style="padding-left:1.2em;margin:.3em 0"><li>t₀ − t₁ tarifa-arbitrajea</li>'
+ + '<li>Kanpoko dirua — enplegatzailearen ekarpena edo sariak</li>'
+ + '<li>zergarik gabeko metaketa — Vorabpauschale-rik ez</li>'
+ + '<li>aukera bakarrari eragiten dioten kotizazio berriak — osasun-/zaintza-asegurua Versorgungsbezüge-ren gainean</li></ol>'
+ + '<p>4. puntua da bAVren desabantaila nagusia, 2. puntua bere abantaila estruktural bakarra. bAVren errendimendua <b>hertsiki gutxitzen da ekarpen-mailarekin</b>, salbuespena absolutua delako eta bere babes-eragina 1/K gisa jaisten delako — ez dago barne-optimorik.</p>'
+ + '<p>Gastu garbia aurrez ezarrita dagoenean, ekarpen gordina bitan-zatiketaren bidez alderantziz kalkulatzen da: N(B) jarraitua da eta hertsiki gorakorra (dN/dB = 1 − muga-kotizazio tasa − muga-zerga tasa > 0), baina BBG-RV-ren % 4 eta % 8ko malguneen, kotizazio-mugen eta tarifa-mugen ondorioz ez da forma itxian alderantzikagarria. 34 bitan-zatiketak zentimo baten hamarrena baino zehaztasun handiagoa ematen dute.</p>',
+ 'det.s.erg': 'Hiru aukerek metatze-fasean zenbateko bera kostatzen dute garbitik.',
+ 'det.s.mon': 'Aukera guztiak epe berean errentifikatuta, gaurko erosteko ahalmenean. Errentifikazioa lineala denez, lerroak zehazki batzen dira.',
+ 'det.s.diag': 'Zergatik gertatzen den — eta non zauden korridore lagunduetik kanpo.',
+ 'msg.linkCopied': 'Esteka kopiatu da. Irekitzen duenak zenbaki hauek berak ikusten ditu — bat ere ez da zerbitzari batetik pasatzen.',
+ 'msg.linkFailed': 'Kopiatzeak ez du funtzionatu. Esteka orain helbide-barran dago.',
+ 'pwa.offline': '<b>Lineaz kanpo funtzionatzen du.</b> Aplikazioa orain nabigatzailearen cachean dago eta konexiorik gabe ere funtzionatzen du. Instalatzeko: iPhone-n «Partekatu» → «Hasierako pantailara gehitu», Android-en menua → «Aplikazioa instalatu».',
+ 'pwa.installAsk': '<b>Aplikazio gisa instalatu?</b> Orduan bere ikono propioarekin egongo da hasierako pantailan eta lineaz kanpo funtzionatuko du. ',
+ 'pwa.declined': 'Ados — aplikazioak horrela ere funtzionatzen du, eta gainera lineaz kanpo.',
+ 'pwa.file': '<b>Fitxategia zuzenean ireki duzu</b> (<kbd>file://</kbd>). Dena kalkulatzen da, dena gordetzen da. PWA bi ezaugarri bakarrik falta dira: hasierako pantailan ikonorik ez eta lineaz kanpoko cacherik ez — hori hemen ere ez litzateke beharrezkoa, fitxategia jada gailuan baitago. Aplikazio-esperientzia osorako, karpeta edozein HTTPS ostalaritzatan jarri eta handik ireki.'
+};
diff --git a/app/i18n.fr.js b/app/i18n.fr.js
new file mode 100644
index 0000000..3b042ff
--- /dev/null
+++ b/app/i18n.fr.js
@@ -0,0 +1,585 @@
+/* =====================================================================
+ Dictionnaire français. Même jeu de clés que i18n.de.js ; ce qui manque
+ ici retombe sur l’entrée allemande.
+ Les références légales restent en allemand à dessein : ce sont les
+ sources primaires et elles n’ont pas de traduction officielle. « bAV »
+ désigne l’Entgeltumwandlung — la retraite d’entreprise alimentée par
+ abandon de salaire brut ; le régime français n’a pas d’équivalent exact,
+ l’abréviation est donc conservée.
+ Typographie : espace fine insécable devant « % » et les deux-points,
+ guillemets français. Le séparateur de milliers de fr-FR est U+202F ;
+ parseNum() accepte de toute façon les deux écritures.
+ ===================================================================== */
+window.I18N_FR = {
+ 'f.I:gehalt.label': 'Salaire annuel brut actuel',
+ 'f.I:gehalt.hint': 'Hors versements exceptionnels, le cas échéant treizième mois au prorata inclus. Détermine votre taux marginal d’imposition et si vous dépassez les plafonds de cotisations sociales.',
+ 'f.I:beitrag.label': 'Cotisation mensuelle bAV, brute',
+ 'f.I:beitrag.hint': 'Abandon de salaire brut au sens du § 1a BetrAVG. Vous n’avez un droit légal que jusqu’à 4 % du plafond de cotisation de l’assurance vieillesse (BBG-RV) ; au-delà, l’accord de l’employeur est requis.',
+ 'f.I:netto_ziel.label': 'Effort net mensuel',
+ 'f.I:netto_ziel.hint': 'Le montant dont votre revenu disponible baisse la première année — la consommation réellement abandonnée, donc la variable de décision économiquement correcte. C’est exactement ce montant qui est investi dans les trois options ; c’est la condition d’une comparaison honnête. Il est en correspondance biunivoque avec la cotisation brute ci-dessus : N(B) = B − économie de cotisations − économie d’impôt est strictement croissante, donc inversible. Elle n’a pas d’inverse en forme close à cause des points anguleux aux plafonds de cotisation et aux bornes du barème ; d’où 34 dichotomies — précision inférieure au dixième de centime.',
+ 'f.I:agzus.label': 'Abondement de l’employeur',
+ 'f.I:agzus.hint': 'Minimum légal 15 % (§ 1a Abs. 1a BetrAVG) ; beaucoup d’employeurs versent davantage. Le point mort face au compte-titres privé se situe grosso modo là où (1+z)·(1−0,211) ≈ 1, soit z ≈ 26,7 % — vérifiable sur la courbe de sensibilité. En mode « au plus juste », cette valeur est souvent hors d’atteinte, l’abondement saturant avant.',
+ 'f.I:agz_fix.label': 'Abondement forfaitaire supplémentaire',
+ 'f.I:agz_fix.hint': 'Forfait indépendant de votre propre cotisation, issu d’une convention collective ou d’un accord d’entreprise — usuel à la Deutsche Bahn et dans de nombreuses conventions, s’ajoutant aux 15 % du § 1a Abs. 1a BetrAVG. C’est une contribution financée par l’employeur au sens du § 3 Nr. 63 EStG ; elle occupe EN PRIORITÉ l’enveloppe de 8 % et l’exonération de cotisations de 4 % (§ 1 Abs. 1 S. 1 Nr. 9 SvEV) : votre propre abandon de salaire s’en trouve évincé d’autant et renchérit. Économiquement, c’est un socle, pas un levier : il ne change pas le rendement marginal de votre euro de cotisation suivant (∂²rendement/∂agz_fix ∂cotisation ≤ 0 — par éviction, il peut même l’abaisser), mais il élève fortement la moyenne. Sur la courbe de sensibilité, il est donc approximativement affine — jusqu’à épuisement de l’enveloppe de 4 % ou de 8 %, où la courbe s’infléchit.',
+ 'f.I:agz_fix_dyn.label': 'Indexer l’abondement forfaitaire',
+ 'f.I:agz_fix_dyn.hint': 'Les forfaits sont le plus souvent inscrits en valeur nominale dans la convention collective et relevés seulement lors des négociations — d’où le réglage par défaut « nominal, constant ». Sur 27 ans à 2 % d’inflation, il en reste le facteur 1,02⁻²⁷ ≈ 0,59 ; qui juge cela trop pessimiste bascule sur « avec le salaire » et obtient un abondement réel croissant au taux gsteig − infl.',
+ 'f.I:agz_fix_dyn.o0': 'nominal, constant',
+ 'f.I:agz_fix_dyn.o1': 'avec le salaire',
+ 'f.I:agzus_sv.label': 'Mode d’abondement',
+ 'f.I:agzus_sv.hint': '« Au plus juste » est la lettre de la loi : le § 1a Abs. 1a BetrAVG ne doit l’abondement que DANS LA MESURE où l’employeur économise effectivement des cotisations sociales. Si votre rémunération dépasse les deux plafonds, il n’économise rien et ne doit rien. C’est pourquoi le curseur ci-dessus sature autour de 21 % dans le cas de base. « Cotisation entière » est un engagement volontaire ou conventionnel, « part exonérée seule » la pratique forfaitaire répandue. Confiance dans la lecture stricte : environ 75 %.',
+ 'f.I:agzus_sv.o0': 'cotisation entière',
+ 'f.I:agzus_sv.o1': 'part exonérée seule',
+ 'f.I:agzus_sv.o2': 'au plus juste',
+ 'f.I:dyn.label': 'Indexer la cotisation',
+ 'f.I:dyn.hint': 'Si la cotisation suit la hausse du salaire, l’utilisation de l’enveloppe de 8 % reste à peu près constante au fil des ans. Si elle reste nominalement constante, sa valeur réelle baisse avec l’inflation — et avec elle l’effort net dont bénéficient les deux autres options pour la comparaison.',
+ 'f.I:dyn.o1': 'avec le salaire',
+ 'f.I:dyn.o0': 'nominal, constant',
+ 'f.I:rendite.label': 'Rendement brut de l’ETF p.a.',
+ 'f.I:rendite.hint': 'Avant frais, avant impôts. Le même ETF dans les trois options — c’est la seule manière de comparer des architectures d’incitation plutôt que des décisions de placement.',
+ 'f.I:alter.label': 'Âge actuel',
+ 'f.I:alter.hint': 'Début de la phase d’accumulation. Année civile 0 = 2026.',
+ 'f.I:alter.unit': 'ans',
+ 'f.I:rentbeg.label': 'Début du versement',
+ 'f.I:rentbeg.hint': 'Début de la phase de versement pour les trois options. Le compte Altersvorsorgedepot n’est liquidable qu’à partir de 65 ans (réforme 2026).',
+ 'f.I:rentbeg.unit': 'ans',
+ 'f.I:kv_ruhe.label': 'Assurance maladie à la retraite',
+ 'f.I:kv_ruhe.hint': 'Le levier décisif. Dans le régime légal (GKV), les rentes d’entreprise sont des Versorgungsbezüge et supportent le taux de cotisation plein (§§ 229, 250 SGB V) ; l’épargne privée non. Ce seul réglage renverse le résultat.',
+ 'f.I:kv_ruhe.o1': 'régime légal',
+ 'f.I:kv_ruhe.o2': 'régime privé',
+ 'f.I:auszform.label': 'Liquidation de la bAV',
+ 'f.I:auszform.hint': 'Capital : intégralement imposable l’année de perception, cotisations maladie réparties sur 120 mois (§ 229 Abs. 1 S. 3 SGB V). La rente étale la prestation sur l’espérance de vie résiduelle et met donc à l’abri un multiple du capital sous le même abattement. Le modèle ne connaît que le tout ou rien ; une sortie partielle en capital de la bAV n’est pas modélisée.',
+ 'f.I:auszform.o1': 'capital',
+ 'f.I:auszform.o2': 'rente viagère',
+ 'f.I:teilkap.label': 'Altersvorsorgedepot : capital initial',
+ 'f.I:teilkap.hint': 'Jusqu’à 30 % du capital accumulé peuvent être perçus en une fois au début de la phase de versement — dans les deux formes de liquidation. Cela coûte deux fois : progressivité pleine l’année de perception, puis rendement seulement net du prélèvement forfaitaire. L’excédent au-delà du plafond annuel (la « manche ») est rentifié sans capital initial ; c’est une convention du modèle, non une règle de droit.',
+ 'f.I:av_auszform.label': 'Altersvorsorgedepot : le reste',
+ 'f.I:av_auszform.hint': 'Ce qu’il advient du capital au-delà du versement initial — indépendamment du choix bAV ci-dessus. Plan de retrait : l’argent reste investi et est retiré avec intérêts ; la couche non subventionnée est imposée sur la moitié du montant différentiel. Rente viagère : le capital va à l’assureur, en contrepartie la couche non subventionnée n’est imposée que sur la part de rendement (§ 22 Nr. 5 S. 2 Buchst. a EStG, 17 % à partir de 67 ans au lieu d’environ 26 % ici). La couche subventionnée est dans les deux cas pleinement imposable en aval ; cela ne change pas.',
+ 'f.I:av_auszform.o1': 'plan de retrait',
+ 'f.I:av_auszform.o2': 'rente viagère',
+ 'f.I:agz_fix_min.label': 'Cotisation propre minimale ouvrant droit au forfait',
+ 'f.I:agz_fix_min.hint': 'Les dispositifs de matching lient le forfait à un effort propre minimal (« qui convertit au moins X reçoit Y »). 0 signifie sans condition — l’abondement coule alors chaque année d’activité, même à cotisation nulle. Attention à la sémantique du modèle : un abondement réellement inconditionnel ne serait pas un effet différentiel de la décision de conversion et flatterait la bAV dans cette comparaison, alors qu’il coulerait de toute façon. N’inscrivez que ce qui dépend effectivement de la participation.',
+ 'f.I:rentfak_av.label': 'Coefficient de rente, Altersvorsorgedepot',
+ 'f.I:rentfak_av.hint': 'Seulement en cas de rentification du compte. Prérempli comme pour la bAV ; un contrat de compte se passe d’enveloppe assurantielle et peut donc coûter moins cher — saisissez la valeur de l’offre concrète. À 0, il n’y a pas de rente.',
+ 'f.I:rentfak_av.unit': '€ pour 10 000 €',
+ 'f.I:rentdyn_av.label': 'Revalorisation de la rente du compte p.a.',
+ 'f.I:rentdyn_av.hint': 'Participation aux bénéfices ou performance des fonds pendant la phase de versement du contrat de compte.',
+ 'f.I:rentfak.label': 'Coefficient de rente, bAV',
+ 'f.I:rentfak.hint': 'Seulement pour la forme « rente ». 26 € de rente mensuelle pour 10 000 € correspondent à un taux de retrait d’environ 3,1 %. Figure sur la fiche d’information produit.',
+ 'f.I:rentfak.unit': '€ pour 10 000 €',
+ 'f.I:rentdyn.label': 'Revalorisation de la rente bAV p.a.',
+ 'f.I:rentdyn.hint': 'Participation aux bénéfices ou performance des fonds pendant la phase de versement.',
+ 'f.I:fuenftel.label': 'Examiner la règle du cinquième',
+ 'f.I:fuenftel.hint': 'Le § 34 EStG n’est applicable qu’à titre exceptionnel à un versement en capital prévu au contrat au sens du § 3 Nr. 63, selon BFH X R 23/15. Prudence : non.',
+ 'f.I:fuenftel.o0': 'non (prudent)',
+ 'f.I:fuenftel.o1': 'oui',
+ 'f.I:planende.label': 'Horizon de comparaison jusqu’à l’âge de',
+ 'f.I:planende.hint': 'Les plans de retrait courent jusque-là. Les rentes viagères sont comparées sur le même horizon ; ce qui coule ensuite figure en mémo sous « Diagnostic ». Qui vit vieux y gagne.',
+ 'f.I:planende.unit': 'ans',
+ 'f.I:ausscheid.label': 'Départ de l’entreprise',
+ 'f.I:ausscheid.hint': 'À partir de là, plus de salaire ni de cotisations. Le capital continue de fructifier jusqu’au début du versement.',
+ 'f.I:ausscheid.unit': 'ans',
+ 'f.I:tzalter.label': 'Temps partiel à partir de l’âge de',
+ 'f.I:tzalter.hint': 'Toute valeur à partir du début du versement signifie : pas de temps partiel. Le défaut est donc 67.',
+ 'f.I:tzalter.unit': 'ans',
+ 'f.I:tzfaktor.label': 'Quotité de temps partiel',
+ 'f.I:tzfaktor.hint': 'Part du salaire à temps plein. 60 % = poste à 60 %.',
+ 'f.I:gsteig.label': 'Progression des salaires p.a.',
+ 'f.I:gsteig.hint': 'Actualise également les plafonds de cotisation, la Bezugsgröße, le salaire moyen et la valeur du point de retraite.',
+ 'f.I:stkl.label': 'Mode d’imposition',
+ 'f.I:stkl.hint': 'Ce qui compte est le MODE D’IMPOSITION, non la classe de retenue à la source : la classe ne pilote que le prélèvement en cours d’année, l’avis annuel applique de toute façon le quotient conjugal du § 32a Abs. 5 EStG. En cas de « commune », saisissez impérativement le revenu imposable du conjoint.',
+ 'f.I:stkl.o1': 'séparée',
+ 'f.I:stkl.o3': 'commune (quotient)',
+ 'f.I:partner.label': 'revenu imposable du conjoint',
+ 'f.I:partner.hint': 'Seulement en imposition commune. Le calcul est 2·IR((ri + ri_conjoint)/2).',
+ 'f.I:kist.label': 'Taux de l’impôt cultuel',
+ 'f.I:kist.hint': '8 % en Bavière et dans le Bade-Wurtemberg, 9 % ailleurs, 0 en cas de sortie de l’Église. Agit aussi sur le prélèvement forfaitaire : 0,25/(1+0,25k)·(1+0,055+k).',
+ 'f.I:tarifanp.label': 'Ajustement des bornes du barème p.a.',
+ 'f.I:tarifanp.hint': 'Le barème entier est dilaté du facteur λ = (1+x)^t : IR = s·λ·T(ri/s/λ). C’est exactement équivalent à un décalage proportionnel de toutes les bornes. 0 % montre la progressivité à froid intégrale.',
+ 'f.I:kinder.label': 'Nombre d’enfants',
+ 'f.I:kinder.hint': 'Prime pour enfant dans l’Altersvorsorgedepot : 1 € par € versé, jusqu’à 300 € par enfant.',
+ 'f.I:kind_jahre.label': 'Années avec prime pour enfant',
+ 'f.I:kind_jahre.hint': 'La prime pour enfant est liée au droit aux allocations familiales (§ 85 EStG) et ne court donc pas sur toute la phase d’accumulation.',
+ 'f.I:kind_jahre.unit': 'ans',
+ 'f.I:kinderlos.label': 'Sans enfant (majoration dépendance)',
+ 'f.I:kinderlos.hint': '0,6 point de pourcentage de majoration à l’assurance dépendance, à la charge du seul salarié (§ 55 Abs. 3 SGB XI).',
+ 'f.I:kinderlos.o0': 'non',
+ 'f.I:kinderlos.o1': 'oui',
+ 'f.I:k_bav.label': 'Frais du produit bAV p.a.',
+ 'f.I:k_bav.hint': 'Enveloppe assurantielle plus TER. Les frais effectifs figurent sur la fiche d’information produit — à y lire, non à estimer.',
+ 'f.I:k_av.label': 'Frais de l’Altersvorsorgedepot p.a.',
+ 'f.I:k_av.hint': 'Pour le compte standard, les frais effectifs sont légalement plafonnés à 1,0 % p.a.',
+ 'f.I:k_priv.label': 'Frais du compte-titres ETF privé p.a.',
+ 'f.I:k_priv.hint': 'TER pure d’un ETF monde large.',
+ 'f.I:infl.label': 'Inflation p.a.',
+ 'f.I:infl.hint': 'Taux d’actualisation de toutes les valeurs « en pouvoir d’achat actuel ». Ne change guère le classement, mais tous les niveaux.',
+ 'f.I:sonst_zve.label': 'autre revenu imposable à la retraite',
+ 'f.I:sonst_zve.hint': 'Surtout la fraction imposable de la retraite légale, hors les produits comparés ici. Détermine le taux marginal en phase de versement — et donc l’arbitrage de barème t₀ − t₁.',
+ 'f.I:rente_br.label': 'retraite légale brute p.a.',
+ 'f.I:rente_br.hint': 'Uniquement pour le plafond en assurance maladie : retraite légale et Versorgungsbezüge partagent UN SEUL plafond de cotisation (§ 223 Abs. 3 SGB V).',
+ 'f.P:bbg_rv.label': 'Plafond assurance vieillesse (annuel)',
+ 'f.P:bbg_rv.hint': 'SVBezGrV 2026 (BGBl. 2025 I Nr. 116), uniforme sur tout le territoire.',
+ 'f.P:bbg_kv.label': 'Plafond assurance maladie / dépendance',
+ 'f.P:bbg_kv.hint': 'SVBezGrV 2026 ; 5 812,50 € par mois.',
+ 'f.P:bezug.label': 'Bezugsgröße (mensuelle)',
+ 'f.P:bezug.hint': 'SVBezGrV 2026, 47 460 € par an. Le vingtième de ce montant constitue l’abattement pour Versorgungsbezüge en assurance maladie (§ 226 Abs. 2 S. 2 SGB V).',
+ 'f.P:de_rv.label': 'Salaire moyen RV',
+ 'f.P:de_rv.hint': 'Annexe 1 au SGB VI, valeur 2026 — dénominateur des points de retraite.',
+ 'f.P:rw.label': 'Valeur actuelle du point',
+ 'f.P:rw.hint': 'Rentenwertbestimmungsverordnung 2026, à partir du 1.7.2026 : 42,52 € (+4,24 %).',
+ 'f.P:rw.unit': '€',
+ 'f.P:rv_an.label': 'Cotisation vieillesse, part salariale',
+ 'f.P:rv_an.hint': '18,6 % pour moitié.',
+ 'f.P:av_an.label': 'Cotisation chômage, part salariale',
+ 'f.P:av_an.hint': '2,6 % pour moitié.',
+ 'f.P:kv_allg.label': 'Taux général assurance maladie',
+ 'f.P:kv_allg.hint': '§ 241 SGB V.',
+ 'f.P:kv_zus.label': 'Cotisation additionnelle moyenne maladie',
+ 'f.P:kv_zus.hint': 'Avis du BMG ; variable selon la caisse — saisissez le taux de la vôtre.',
+ 'f.P:pv_ges.label': 'Taux total assurance dépendance',
+ 'f.P:pv_ges.hint': '§ 55 SGB XI. Les réductions à partir du deuxième enfant ne sont pas modélisées.',
+ 'f.P:pv_an.label': 'Dépendance, part salariale',
+ 'f.P:pv_an.hint': 'Différent en Saxe (2,3 %).',
+ 'f.P:pv_kl.label': 'Majoration dépendance pour personnes sans enfant',
+ 'f.P:pv_kl.hint': '§ 55 Abs. 3 SGB XI, à la charge du seul salarié.',
+ 'f.P:gfb.label': 'Abattement de base (fin de la zone 1)',
+ 'f.P:gfb.hint': '§ 32a Abs. 1 EStG dans sa version issue du Steuerfortentwicklungsgesetz.',
+ 'f.P:e2.label': 'Fin de la zone 2',
+ 'f.P:e2.hint': 'Le taux marginal passe de 14 % à 23,97 %.',
+ 'f.P:e3.label': 'Fin de la zone 3',
+ 'f.P:e3.hint': 'Le taux marginal passe de 23,97 % à 42 %.',
+ 'f.P:e4.label': 'Début de la zone 5 (taux des hauts revenus)',
+ 'f.P:e4.hint': 'À partir de 277 826 €, 45 % s’appliquent.',
+ 'f.P:a2.label': 'Coefficient a₂',
+ 'f.P:a2.hint': 'IR = (a₂·y + b₂)·y avec y = (ri − abattement de base)/10 000.',
+ 'f.P:b2.label': 'Coefficient b₂',
+ 'f.P:a3.label': 'Coefficient a₃',
+ 'f.P:a3.hint': 'IR = (a₃·z + b₃)·z + c₃ avec z = (ri − 17 799)/10 000.',
+ 'f.P:b3.label': 'Coefficient b₃',
+ 'f.P:c3.label': 'Constante c₃',
+ 'f.P:c4.label': 'Constante c₄',
+ 'f.P:c4.hint': 'IR = 0,42·ri − c₄.',
+ 'f.P:c5.label': 'Constante c₅',
+ 'f.P:c5.hint': 'IR = 0,45·ri − c₅.',
+ 'f.P:soli.label': 'Contribution de solidarité',
+ 'f.P:soli.hint': 'SolzG 1995.',
+ 'f.P:soli_fg.label': 'Seuil d’exonération de la contribution',
+ 'f.P:soli_fg.hint': '2026, barème simple, rapporté à l’impôt établi ; doublé en imposition commune. À quoi s’ajoute une zone d’atténuation.',
+ 'f.P:soli_mz.label': 'Zone d’atténuation, charge marginale',
+ 'f.P:soli_mz.hint': '§ 3 Abs. 2a SolzG.',
+ 'f.P:an_pausch.label': 'Déduction forfaitaire des salariés',
+ 'f.P:an_pausch.hint': '§ 9a S. 1 Nr. 1a EStG.',
+ 'f.P:sa_pausch.label': 'Forfait pour charges déductibles',
+ 'f.P:sa_pausch.hint': '§ 10c EStG.',
+ 'f.P:kapst.label': 'Taux du prélèvement forfaitaire',
+ 'f.P:kapst.hint': '§ 32d Abs. 1 EStG.',
+ 'f.P:tfs.label': 'Exonération partielle des fonds actions',
+ 'f.P:tfs.hint': '§ 20 Abs. 1 Nr. 3 combiné au § 20 InvStG, part actions supérieure à 50 %.',
+ 'f.P:sparerpb.label': 'Abattement épargnant',
+ 'f.P:sparerpb.hint': '§ 20 Abs. 9 EStG ; doublé en imposition commune. Absorbe une large part de la Vorabpauschale — voir la cascade.',
+ 'f.P:basiszins.label': 'Taux de base de la Vorabpauschale',
+ 'f.P:basiszins.hint': 'Circulaire du BMF du 13.01.2026, § 18 Abs. 4 InvStG (2025 : 2,53 %). Mettre 0 signifie : pas de Vorabpauschale.',
+ 'f.P:vp_faktor.label': 'Facteur du rendement de base',
+ 'f.P:vp_faktor.hint': '§ 18 Abs. 1 S. 1 InvStG.',
+ 'f.P:st_frei_q.label': 'exonéré § 3 Nr. 63 (part du BBG-RV)',
+ 'f.P:st_frei_q.hint': '8 % du BBG-RV = 8 112 € en 2026.',
+ 'f.P:sv_frei_q.label': 'exonéré de cotisations (part du BBG-RV)',
+ 'f.P:sv_frei_q.hint': '§ 1 Abs. 1 S. 1 Nr. 9 SvEV ; 4 % = 4 056 € en 2026. C’est aussi la limite du droit légal du § 1a BetrAVG.',
+ 'f.P:zul_g1.label': 'Prime, tranche 1 (par € de cotisation propre)',
+ 'f.P:zul_g1.hint': 'Altersvorsorgereformgesetz, en vigueur depuis mai 2026, applicable à partir du 1.1.2027.',
+ 'f.P:zul_s1.label': 'Limite de la tranche 1',
+ 'f.P:zul_s1.hint': 'Jusqu’à 360 € de cotisation propre : 50 centimes par €.',
+ 'f.P:zul_g2.label': 'Prime, tranche 2 (par € de cotisation propre)',
+ 'f.P:zul_g2.hint': 'De 361 à 1 800 € : 25 centimes par €.',
+ 'f.P:zul_s2.label': 'Limite de la tranche 2',
+ 'f.P:zul_s2.hint': 'Montant maximal de cotisation propre subventionnée ; donne une prime de base maximale de 540 €.',
+ 'f.P:kind_zul.label': 'Prime par enfant',
+ 'f.P:kind_zul.hint': '1 € par € versé, jusqu’à 300 € par enfant.',
+ 'f.P:av_max.label': 'Versement annuel maximal',
+ 'f.P:av_max.hint': 'FAQ du BMF sur la réforme de l’épargne retraite privée subventionnée, état au 05.05.2026. Ce qui dépasse part sur une voie annexe imposée comme un compte-titres privé.',
+ 'f.P:av_sa_max.label': 'Plafond de déduction § 10a',
+ 'f.P:av_sa_max.hint': 'HYPOTHÈSE DE MODÈLE, confiance environ 70 %. Cotisation propre jusqu’à 1 800 € plus les primes. Ce seul chiffre décide si un enfant relève ou abaisse la valeur du compte AV.',
+ 'f.P:ertragsq.label': 'Part de rendement (âge 67)',
+ 'f.P:ertragsq.hint': '§ 22 Nr. 1 S. 3 Buchst. a Doppelbuchst. bb EStG, pour les fractions de rente non subventionnées.',
+ 'f.P:halb.label': 'part imposable du montant différentiel',
+ 'f.P:halb.hint': '§ 20 Abs. 1 Nr. 6 S. 2 EStG par analogie (contrat de plus de 12 ans, versement après 62 ans) : moitié du montant différentiel. Confiance environ 80 %.',
+
+ /* ---------------- Cadre, titres de fenêtres, en-tête et pied ---------------- */
+ 'app.title': 'Comparateur de retraite',
+ 'app.meta': 'Comparer la retraite d’entreprise, l’Altersvorsorgedepot et un compte-titres ETF privé à effort net égal. État du droit 2026.',
+ 'hdr.title': 'Comparateur de retraite',
+ 'hdr.sub': 'Retraite d’entreprise, Altersvorsorgedepot et compte&#8209;titres ETF privé &mdash; à <b>effort net égal</b> et avec le même ETF. État du droit 2026.',
+ 'win.header': 'Comparateur de retraite',
+ 'win.result': 'Résultat',
+ 'win.input': 'Vos données',
+ 'win.chart': 'Graphiques',
+ 'win.extra': 'Données complémentaires',
+ 'win.calc': 'Détail du calcul',
+ 'win.share': 'Enregistrer et partager',
+ 'win.min': 'Réduire',
+ 'win.restore': 'Restaurer',
+ 'win.n': function(p){ return 'Fenêtre ' + p.n; },
+ 'input.sub': 'Les chiffres se recalculent immédiatement à chaque modification. Avec <span class="qm" style="cursor:default">?</span>, chaque champ s’explique lui-même.',
+ 'extra.sub': 'Tout ici a des valeurs par défaut sensées. N’y touchez que si cela vous concerne.',
+ 'calc.sub': 'Pour qui veut refaire le calcul.',
+ 'share.sub': 'Vos saisies restent exclusivement dans ce navigateur (<kbd>localStorage</kbd>). Rien n’est transmis, il n’y a ni serveur ni traceur.',
+ 'ui.share': 'Copier un lien avec mes chiffres',
+ 'ui.export': 'Enregistrer dans un fichier',
+ 'ui.import': 'Charger un fichier',
+ 'ui.reset': 'Tout réinitialiser',
+ 'ui.pin.set': 'Mémoriser comme référence',
+ 'ui.pin.clear': 'Effacer la référence',
+ 'ui.lang': 'Langue',
+ 'ui.lang.aria': 'Choisir la langue',
+ 'ui.lang.partial': 'traduite en partie seulement',
+ 'ui.lang.partialNote': 'Cette langue est <b>traduite en partie</b> : interface, noms de champs, en-têtes de tableaux et légendes de graphiques sont là. Les longues explications juridiques — les textes <span class="qm" style="cursor:default">?</span> des champs, la conclusion et le détail du calcul — s’affichent en allemand. Les références légales (BetrAVG, EStG, SGB V) restent allemandes dans toutes les langues : officiellement, elles n’existent pas autrement.',
+ 'sb.up': 'Remonter au résultat',
+ 'footer.1': '<b>Ni conseil fiscal ni conseil en placement.</b> Un modèle n’est pas un contrat. L’état du droit 2026 sur l’épargne retraite privée réformée n’est pas définitivement fixé sur plusieurs points ; les hypothèses les moins sûres figurent sous « Détail du calcul → Robustesse des hypothèses » et y sont modifiables.',
+ 'footer.2': 'Moteur de calcul porté à l’identique depuis le modèle Excel <span class="pill">bAV-DYNO_vs_Altersvorsorgedepot_vs_ETF.xlsx</span> et vérifié à la précision machine sur trois cas de test (écart relatif maximal 1,3·10<sup>&minus;14</sup>).',
+
+ /* ---------------- Les trois options ---------------- */
+ 'opt.bav.name': 'bAV (abandon de salaire)',
+ 'opt.bav.short': 'bAV',
+ 'opt.bav.nom': 'la retraite d’entreprise',
+ 'opt.bav.satz': 'La retraite d’entreprise',
+ 'opt.bav.gen': 'de la bAV',
+ 'opt.av.name': 'Altersvorsorgedepot',
+ 'opt.av.short': 'compte AV',
+ 'opt.av.nom': 'l’Altersvorsorgedepot',
+ 'opt.av.satz': 'L’Altersvorsorgedepot',
+ 'opt.av.gen': 'de l’Altersvorsorgedepot',
+ 'opt.priv.name': 'compte-titres ETF privé',
+ 'opt.priv.short': 'privé',
+ 'opt.priv.nom': 'le compte-titres ETF privé',
+ 'opt.priv.satz': 'Le compte-titres ETF privé',
+ 'opt.priv.gen': 'du compte-titres ETF privé',
+
+ /* ---------------- Indicateurs ---------------- */
+ 'metric.monat.label': 'Prestation mensuelle',
+ 'metric.monat.unit': '€/mois',
+ 'metric.monat.desc': 'Versement mensuel constant sur toute la phase de liquidation, à valeur égale, en pouvoir d’achat actuel. Le seul chiffre directement comparable à votre revenu net d’aujourd’hui.',
+ 'metric.ertrag.label': 'Gain net (valeur actuelle)',
+ 'metric.ertrag.unit': '€',
+ 'metric.ertrag.desc': 'Ce que l’option rapporte, en pouvoir d’achat actuel, au-delà de la mise personnelle : valeur actuelle de toutes les prestations nettes moins valeur actuelle de l’effort net.',
+ 'metric.irr.label': 'Taux de rendement interne',
+ 'metric.irr.unit': '% p.a.',
+ 'metric.irr.desc': 'Rendement du montant net réellement engagé, en nominal. Directement comparable au rendement brut de l’ETF paramétré — l’écart est exactement ce que coûtent ou rapportent, ensemble, les incitations et les prélèvements.',
+ 'metric.kapital.label': 'Capital au départ en retraite',
+ 'metric.kapital.unit': '€',
+ 'metric.kapital.desc': 'Avant impôts et avant cotisations sociales, en nominal. Délibérément PAS la grandeur de décision : la bAV mène souvent ici, mais perd à la liquidation.',
+ 'metric.pa': ' p.a.',
+ 'metric.pp': ' pts',
+ 'metric.short.monat': 'Mois',
+ 'metric.short.ertrag': 'Gain',
+ 'metric.short.irr': 'TRI',
+ 'metric.short.kapital': 'Capital',
+
+ /* ---------------- Champs de saisie, cadre ---------------- */
+ 'unit.pct': '%',
+ 'unit.eur': '€',
+ 'unit.eurm': '€/mois',
+ 'ui.hintFor': function(p){ return 'Explication de : ' + p.label; },
+ 'ui.couple': '<span>⇅</span> Deux vues sur la même grandeur. Modifiez l’une, l’autre suit.',
+ 'ui.cnt.legal': function(p){ return p.n + ' paramètres légaux'; },
+ 'ui.cnt.fields': function(p){ return p.n + ' champs'; },
+ 'ui.legalNote': 'Grandeurs légales avec référence. À ne modifier que si le droit a changé ou si votre caisse s’écarte de la moyenne.',
+ 'group.bav': 'Abondement et formes de liquidation en détail',
+ 'group.person': 'Chronologie, départ, temps partiel',
+ 'group.steuer': 'Impôt, imposition, enfants',
+ 'group.markt': 'Frais et inflation',
+ 'group.ruhe': 'Retraite',
+ 'group.p_sv': 'Paramètres : sécurité sociale 2026',
+ 'group.p_est': 'Paramètres : barème de l’impôt sur le revenu 2026 (§ 32a EStG)',
+ 'group.p_kap': 'Paramètres : imposition des revenus du capital et des fonds',
+ 'group.p_bav': 'Paramètres : retraite d’entreprise et épargne privée subventionnée',
+
+ /* ---------------- Notes dynamiques sous les champs ---------------- */
+ 'n.beitrag.ueber8': function(p, f){
+ return 'Au-delà de 8 % du plafond de cotisation vieillesse (' + f.eur(p.v8) + ' par an). La part excédentaire n’est '
+ + 'privilégiée ni fiscalement ni socialement — elle passe dans l’enveloppe assurantielle et n’y récolte '
+ + 'que l’assujettissement aux cotisations d’assurance maladie.'; },
+ 'n.beitrag.ueber4': function(p, f){
+ return 'Au-delà de 4 % du plafond de cotisation vieillesse (' + f.eur(p.v4) + ' par an). Jusque-là vous disposez '
+ + 'd’un droit légal au titre du § 1a BetrAVG ; au-delà, l’accord de l’employeur est requis.'; },
+ 'n.agzus.gedeckelt': function(p, f){
+ return 'Plafonné à ' + f.pct(p.quote, 1) + '. L’employeur n’économise en réalité que '
+ + f.eur2(p.ersparnis) + ' par an — des valeurs plus élevées ne changent rien tant que le mode d’abondement '
+ + 'reste « au plus juste ».'; },
+ 'n.agz_fix.fliesstNicht': function(p, f){
+ return 'Ne coule pas : votre cotisation mensuelle de ' + f.eur2(p.beitrag) + ' est inférieure au '
+ + 'seuil minimal de ' + f.eur2(p.schwelle) + ' (champ sous « Données complémentaires »).'; },
+ 'n.agz_fix.ueber4': function(p, f){
+ return 'Le forfait à lui seul dépasse l’enveloppe de 4 % (' + f.eur(p.topf)
+ + ' par an) de ' + f.eur(p.ueber) + '. Cette part serait chez vous du salaire '
+ + 'soumis à cotisations — le modèle ne décompte PAS la charge de cotisations supplémentaire et '
+ + 'surestime d’autant la bAV.'; },
+ 'n.agz_fix.verdraengung': function(p, f){
+ return 'Occupe l’enveloppe de 4 % en priorité : de votre propre cotisation, il ne reste plus que '
+ + f.eur(p.rest) + ' exonérés de cotisations. Votre effort net augmente d’autant — l’abondement '
+ + 'reste néanmoins de l’argent offert, il ne fait que déplacer la limite de l’incitation personnelle.'; },
+ 'n.agz_fix.ueber8': 'Avec votre propre cotisation, au-delà de 8 % du BBG-RV — l’excédent n’est privilégié ni fiscalement ni socialement.',
+ 'n.agz_fix_min.knapp': function(p, f){
+ return 'Vous n’êtes que ' + f.eur2(p.d) + ' au-dessus du seuil. En dessous, le forfait '
+ + 'disparaît entièrement : le rendement marginal du dernier euro cotisé est infini en ce point, '
+ + 'et le couplage brut ↔ net y est discontinu.'; },
+ 'n.agz_fix_min.verfehlt': function(p, f){
+ return 'Seuil non atteint — ' + f.eur2(p.fehlt) + ' de plus par mois déclenchent ' + f.eur2(p.zuschuss)
+ + ' d’abondement. C’est presque toujours l’euro le plus rentable de tout le modèle.'; },
+ 'n.teilkap.kosten': function(p, f){
+ return 'Coûte ' + (p.gewinn ? 'rien, au contraire : ' + p.dtxt : p.dtxt + ' ' + p.unit)
+ + ' par rapport à une rentification intégrale. Raison : le capital initial est intégralement imposable '
+ + 'l’année de perception (charge marginale à cet endroit ' + f.pct(p.grenz, 1) + ') et ne fructifie ensuite '
+ + 'plus qu’au taux net du prélèvement forfaitaire au lieu du rendement du produit.'; },
+ 'n.av_auszform.horizont': function(p, f){
+ return 'Au-delà de l’horizon de comparaison, cette rente verse encore ' + f.eur(p.rest)
+ + ', qui ne sont PAS comptés ici. Un horizon fixe sous-estime systématiquement toute rente '
+ + 'viagère — qui vit vieux y gagne.'; },
+
+ /* ---------------- Cartes de résultat ---------------- */
+ 'card.lead': 'en tête',
+ 'card.unchanged': 'inchangé',
+ 'base.pinned': 'Δ par rapport à l’état mémorisé',
+ 'base.delta': function(p){ return 'Δ ' + p.desc; },
+ 'base.none': 'Déplacez un curseur — la variation apparaîtra ici sous forme de Δ.',
+ 'base.desc.prev': 'état précédent',
+ 'base.desc.pinned': 'état mémorisé',
+ 'base.desc.change': function(p){ return 'avant la modification de « ' + p.label + ' »'; },
+ 'rank.swap': function(p, f){
+ return '<b>Les indicateurs ne sont pas d’accord.</b> Selon la prestation mensuelle, '
+ + p.a + ' devance ' + p.b + ' ; selon la valeur actuelle du gain net, c’est l’inverse. '
+ + 'Raison : la valeur actuelle actualise à l’inflation (' + f.pct(p.infl, 2) + '), la prestation mensuelle '
+ + 'rentifie au taux de réinvestissement net d’impôt (' + f.pct(p.wiederanl, 2) + '). Plus les deux '
+ + 's’écartent, mieux se présente une sortie précoce en capital. Quel indicateur retenir dépend de '
+ + 'ce que vous feriez de l’argent, le placer ou le dépenser — pour « dépenser », réglez le champ '
+ + '« Frais du compte-titres ETF privé » de sorte que le taux de réinvestissement tende vers zéro.'; },
+ 'warn.unreachable': 'Cet effort net est hors d’atteinte — il dépasse votre salaire. La plus haute valeur possible a été retenue.',
+ 'warn.inactive': 'La première année, d’après vos données, vous n’exercez plus d’activité — il n’y a pas d’abandon de salaire, donc pas d’effort net à partir duquel remonter à une cotisation brute. Vérifiez « Départ de l’entreprise » et « Âge actuel ».',
+
+ /* ---------------- Conclusion en clair ---------------- */
+ 'verdict.lead': function(p){
+ return '<b>' + p.satz + '</b> arrive en tête avec ' + p.wert + ' — ' + p.d2 + ' de plus que ' + p.nom2
+ + (p.nom3 ? ' et ' + p.d3 + ' de plus que ' + p.nom3 : '') + '.'; },
+ 'verdict.pp': function(p){ return p.v + ' points de pourcentage'; },
+ 'verdict.top': function(p, f){
+ return ' Le poste le plus important dans l’écart ' + p.gen + ' avec le compte-titres ETF privé est '
+ + '« ' + p.label + ' » — et ce ' + (p.pro ? 'en faveur ' : 'au détriment ') + p.gen
+ + ', pour ' + f.eur(Math.abs(p.wert)) + ' en valeur actuelle. La décomposition complète figure sous « Facteurs de valeur ».'; },
+ 'verdict.band': function(p, f){
+ return '<span class="band">Quelle robustesse ? Avec un rendement brut de ' + f.pct(p.lo, 1)
+ + ' au lieu de ' + f.pct(p.mid, 1) + ', ce serait ' + p.vlo + ' ; à ' + f.pct(p.hi, 1) + ', ce serait '
+ + p.vhi + ' — le classement '
+ + (p.stabil ? 'reste le même sur cette plage.'
+ : '<b>s’inverse sur cette plage</b> ; le résultat ne porte donc pas ici.')
+ + '</span>'; },
+ 'demo.text': '<b>Ce sont encore des valeurs d’exemple</b> — 40 ans, 75 000 € de salaire annuel brut, 300 € d’abandon de salaire par mois, affiliation au régime légal d’assurance maladie. Saisissez les vôtres sous « Vos données » ; cet avis disparaîtra de lui-même.',
+
+ /* ---------------- Bandeau flottant ---------------- */
+ 'sb.cap': function(p){ return p.label + ' · ' + p.unit + (p.kaufkraft ? ', pouvoir d’achat actuel' : ''); },
+ 'sb.aria': function(p){ return 'Résultat : ' + p.label; },
+
+ /* ---------------- Graphiques ---------------- */
+ 'tab.sens': 'Sensibilité',
+ 'tab.wf': 'Facteurs de valeur',
+ 'tab.kap': 'Évolution du capital',
+ 'tab.zer': 'Décomposition mensuelle',
+ 'chart.error': function(p){ return 'Graphique non affichable : ' + p.msg; },
+ 'sens.readout': 'Pointillés : votre valeur actuelle. Anneaux : intersections avec le compte-titres privé. Survolez la courbe ou touchez-la pour lire les valeurs.',
+ 'sens.legendY': function(p){ return 'y : ' + p.label + ' (' + p.unit + ')'; },
+ 'sens.note': function(p){
+ return 'Le dernier curseur déplacé est recalculé sur toute son étendue — ' + p.n
+ + ' passages complets du modèle. Actuellement : « ' + p.label + ' ». '
+ + 'Déplacez un autre curseur et la courbe change avec lui.'; },
+ 'sens.noteNetto': function(p, f){
+ return ' Attention : ce curseur modifie aussi l’effort net (ici ' + f.eur2(p.lo) + ' à '
+ + f.eur2(p.hi) + ' par mois) et donc le montant investi dans les trois options. '
+ + 'Les trois courbes sont donc comparables loyalement pour chaque x pris isolément, mais le niveau '
+ + 'entre différents x ne l’est pas. Les points anguleux se situent aux plafonds de cotisation ('
+ + f.eur(p.bbgkv) + ' pour maladie/dépendance, ' + f.eur(p.bbgrv) + ' pour vieillesse/chômage) et aux bornes du barème.'; },
+ 'wf.up': 'accroît le gain',
+ 'wf.down': 'réduit le gain',
+ 'wf.legend': 'Valeur actuelle du gain net, pouvoir d’achat actuel',
+ 'wf.check': function(p, f){
+ return 'Vérification : ' + f.eur(p.start) + ' + ' + f.eur(p.summe) + ' = ' + f.eur(p.start + p.summe)
+ + ' (attendu ' + f.eur(p.ende) + ', écart ' + f.nf2(p.start + p.summe - p.ende) + ' €).'; },
+ 'wf.note': 'Décomposition télescopique, elle tombe donc juste exactement — mais elle <b>dépend de l’ordre</b> : les effets ne sont pas séparables additivement, chaque barre mesure la contribution <i>sachant</i> celles qui la précèdent. Touchez une barre pour la dérivation.',
+ 'wf.barinfo': function(p){ return p.label + ' : ' + p.note; },
+ 'wfb.vp.label': 'Disparition de la Vorabpauschale',
+ 'wfb.vp.note': 'Ni la bAV ni l’Altersvorsorgedepot ne connaissent la Vorabpauschale (§ 18 InvStG). Mesuré comme compte-titres privé sans Vorabpauschale moins avec. La barre peut être négative : la Vorabpauschale s’absorbe en grande partie dans l’abattement épargnant, mais relève le prix de revient pour son montant entier — elle devient alors, en net, un avantage pour le compte privé.',
+ 'wfb.zul.label': 'Primes et déduction pour charges',
+ 'wfb.zul.note': 'Argent de tiers selon le nouveau modèle de primes, plus la déduction du § 10a EStG. Mesuré en désactivant les deux voies d’incitation.',
+ 'wfb.arch.label': 'Architecture d’imposition (reste)',
+ 'wfb.arch.note': 'Arbitrage de barème t₀ − t₁ et tout le reste. Déterminé par résidu, pour que la chaîne se referme exactement.',
+ 'wfb.agz.label': 'Abondement de l’employeur',
+ 'wfb.agz.note': 'Argent de tiers — le seul avantage structurel de la bAV qui ne vienne pas du droit fiscal. Mesuré en désactivant l’abondement.',
+ 'wfb.tarif.label': 'Arbitrage de barème et reste',
+ 'wfb.tarif.note': 'Taux marginal à l’entrée moins taux marginal à la sortie, plus tout le reste. Déterminé par résidu, pour que la chaîne se referme exactement. Le report d’imposition seul est sans valeur : (1−t)(1+r)ⁿ = (1+r)ⁿ(1−t), la multiplication commute.',
+ 'wfb.kvpv.label': 'Maladie/dépendance sur les Versorgungsbezüge',
+ 'wfb.kvpv.note': '§§ 229, 250 SGB V : le retraité supporte seul le taux plein. Mesuré comme écart au réglage « assurance privée à la retraite ».',
+ 'wfb.ep.label': 'Perte de points de retraite',
+ 'wfb.ep.note': 'L’abandon de salaire réduit la rémunération soumise à cotisations et donc la retraite légale. Décompté en net.',
+ 'kap.rentbeg': 'Départ en retraite',
+ 'kap.swap': 'Capital → droit à rente',
+ 'kap.legend': 'trait plein : total &nbsp;·&nbsp; pointillés : librement disponible',
+ 'kap.readout': function(p, f){
+ return 'Bloqué au départ en retraite : bAV ' + f.eur(p.bavGeb) + ' sur ' + f.eur(p.bav)
+ + ' · compte AV ' + f.eur(p.avGeb) + ' sur ' + f.eur(p.av)
+ + ' · compte privé ' + f.eur(0) + ' sur ' + f.eur(p.priv)
+ + '. La prestation mensuelle équivalente est consommée, c’est pourquoi chaque option finit à zéro.'; },
+ 'kap.note': function(p, f){
+ return 'Solde dans le produit, augmenté en phase de liquidation des versements nets '
+ + 'réinvestis (' + f.pct(p.wiederanl, 2) + ' après impôts) et diminué de la prestation '
+ + 'mensuelle équivalente, effectivement consommée. C’est pourquoi chaque option atterrit exactement à zéro. '
+ + 'Comme la consommation ne se prélève que sur le réinvestissement et que le capital du produit reste dans le produit, où il '
+ + 'croît au rendement du produit avant impôts, les courbes n’évoluent pourtant pas proportionnellement. '
+ + '— La ligne pointillée est la part librement disponible : la bAV est jusqu’au départ en retraite '
+ + 'entièrement bloquée (le § 1b BetrAVG connaît l’acquisition définitive, non la disponibilité) ; pour '
+ + 'l’Altersvorsorgedepot, un retrait avant 65 ans fait perdre l’avantage fiscal et seul l’excédent au-delà du '
+ + 'plafond annuel est libre ; le compte-titres privé est libre à tout moment. C’est le seul axe sur lequel une '
+ + 'sortie en capital fait bonne figure. '
+ + (p.verrentet ? 'Comme vous rentifiez le compte, le capital y va lui aussi à l’assureur — la '
+ + 'courbe baisse en conséquence, bien que rien ne soit perdu. ' : '')
+ + 'Et encore une fois, explicitement : les courbes montrent le patrimoine issu de CETTE seule décision, '
+ + 'non votre patrimoine total.'; },
+ 'zer.netto': 'net',
+ 'zer.tax': 'impôt',
+ 'zer.kv': 'maladie/dép.',
+ 'zer.pension': 'retraite',
+ 'zer.legend': '<span><i style="background:#808080"></i>impôt</span><span><i style="background:#800000"></i>maladie/dép.</span><span><i style="background:#800080"></i>retraite légale perdue</span><span style="margin-left:auto">socle coloré = ce qui reste</span>',
+ 'zer.readout': 'Tout en prestation mensuelle constante, en pouvoir d’achat actuel. L’annuitisation étant linéaire, les blocs s’additionnent exactement.',
+ 'zer.note': function(p, f){
+ return 'La période de perception est identique pour les trois options. Une sortie en capital n’est pas '
+ + 'divisée par douze, mais rentifiée sur la même période au taux de réinvestissement net d’impôt ('
+ + f.pct(p.wiederanl, 2) + ' p.a.). Qui consomme le capital au lieu de le placer se retrouve '
+ + 'plus mal loti.'; },
+
+ /* ---------------- Détail du calcul ---------------- */
+ 'det.h.bav': 'bAV',
+ 'det.h.av': 'compte AV',
+ 'det.h.priv': 'privé',
+ 'det.h.kennzahl': 'Indicateur',
+ 'det.h.wert': 'Valeur',
+ 'det.erg.netto': 'Total versé sur le net (nominal)',
+ 'det.erg.fremd': 'Argent de tiers (abondement ou primes)',
+ 'det.erg.kapital': 'Capital au début du versement',
+ 'det.erg.brutto': 'Total des versements bruts',
+ 'det.erg.steuer': 'dont impôt sur le revenu / prélèvement forfaitaire',
+ 'det.erg.kvpv': 'dont assurance maladie et dépendance',
+ 'det.erg.rentenverlust': 'Perte de retraite légale (cumulée)',
+ 'det.erg.nettoausz': 'Total des versements nets (nominal)',
+ 'det.erg.bwausz': 'Valeur actuelle des versements nets',
+ 'det.erg.bwaufw': 'Valeur actuelle de l’effort net',
+ 'det.erg.ertrag': 'Valeur actuelle du gain net',
+ 'det.erg.verhaeltnis': 'Rapport gain / effort',
+ 'det.erg.irr': 'Taux de rendement interne (nominal)',
+ 'det.erg.vorsprung': 'Avance sur le compte-titres privé',
+ 'det.mon.brutto': 'Prestation brute par mois',
+ 'det.mon.steuer': 'moins impôt sur le revenu / prélèvement forfaitaire',
+ 'det.mon.kvpv': 'moins assurance maladie et dépendance',
+ 'det.mon.ep': 'moins perte de retraite légale',
+ 'det.mon.netto': 'NET PAR MOIS (pouvoir d’achat actuel)',
+ 'det.diag.beitrag': 'Cotisation brute bAV par mois',
+ 'det.diag.aufwand': 'Effort net par mois (première année)',
+ 'det.diag.grenzsteuer': 'Taux marginal en phase d’accumulation (première année)',
+ 'det.diag.ersparnis': 'Taux d’économie total (impôt + cotisations), première année',
+ 'det.diag.svAG': 'économie de cotisations effective de l’employeur',
+ 'det.diag.svAN': 'économie de cotisations effective du salarié',
+ 'det.diag.ngef': 'Part des cotisations bAV sans avantage (première année)',
+ 'det.diag.aussch': 'Utilisation du droit légal (4 % du BBG-RV)',
+ 'det.diag.agzVar': 'dont abondement employeur : en pourcentage (première année)',
+ 'det.diag.agzFix': 'dont abondement employeur : montant forfaitaire (première année)',
+ 'det.diag.agzFixUeber4': 'forfait au-delà de l’enveloppe de 4 % (non compté comme charge de cotisations)',
+ 'det.diag.vbMonat': 'Versorgungsbezug mensuel au début du versement',
+ 'det.diag.freibetrag': 'Abattement Versorgungsbezüge la même année',
+ 'det.diag.vbQuote': 'Rapport Versorgungsbezug / abattement',
+ 'det.diag.kapFreiKapital': 'capital possible sans cotisations (sortie en capital)',
+ 'det.diag.kapFreiRente': 'capital possible sans cotisations (rente viagère)',
+ 'det.diag.memoRest': 'MÉMO : versements de rente bAV au-delà de l’horizon',
+ 'det.diag.memoRestAv': 'MÉMO : rente du compte au-delà de l’horizon',
+ 'det.diag.wiederanl': 'Taux de réinvestissement net d’impôt',
+ 'det.diag.kapstEff': 'prélèvement forfaitaire effectif, contribution de solidarité et impôt cultuel inclus',
+ 'det.diag.bestAnteil': 'Fraction imposable de la retraite légale',
+ 'det.warn.lead': 'Vous vous situez hors du couloir privilégié : ',
+ 'det.warn.aussch': 'Au-delà de 100 % d’utilisation, il n’existe plus de droit légal à l’abandon de salaire. ',
+ 'det.warn.ngef': 'Une part sensible des cotisations n’est privilégiée ni fiscalement ni socialement — cette couche passe dans une enveloppe assurantielle sans rien obtenir en échange, hormis l’assujettissement aux cotisations maladie. ',
+ 'det.warn.vb': 'Le Versorgungsbezug dépasse nettement l’abattement ; l’effet protecteur d’un abattement absolu décroît comme 1/capital. ',
+ 'det.anspar.h.jahr': 'Année',
+ 'det.anspar.h.brutto': 'Brut',
+ 'det.anspar.h.beitrag': 'Cotisation bAV',
+ 'det.anspar.h.agzVar': 'Abond. %',
+ 'det.anspar.h.agzFix': 'Abond. fixe',
+ 'det.anspar.h.sv': 'Écon. cotis.',
+ 'det.anspar.h.st': 'Écon. impôt',
+ 'det.anspar.h.netto': 'Effort net',
+ 'det.anspar.h.zul': 'Primes',
+ 'det.anspar.h.kbav': 'Capital bAV',
+ 'det.anspar.h.kav': 'Capital AV',
+ 'det.anspar.h.kpriv': 'Capital privé',
+ 'det.row.year': function(p){ return p.jahr + ' (âge ' + p.alter + ')'; },
+ 'det.ausz.h.jahr': 'Année',
+ 'det.ausz.h.bavBr': 'bAV brut',
+ 'det.ausz.h.kvpv': 'maladie/dép.',
+ 'det.ausz.h.steuer': 'Impôt',
+ 'det.ausz.h.mind': 'Réduction retraite',
+ 'det.ausz.h.bavNet': 'bAV net',
+ 'det.ausz.h.avBr': 'AV brut',
+ 'det.ausz.h.avNet': 'AV net',
+ 'det.ausz.h.privBr': 'privé brut',
+ 'det.ausz.h.privNet': 'privé net',
+ 'det.ann.intro': 'Le classement dépend de questions de droit qui, en 2026, ne sont pas toutes tranchées. Les nombres entre parenthèses sont des degrés de confiance subjectifs.',
+ 'det.ann.h.annahme': 'Hypothèse',
+ 'det.ann.h.vertrauen': 'Confiance',
+ 'det.ann.h.anmerkung': 'Remarque',
+ 'det.ann.r1.a': 'Paramètres de sécurité sociale 2026, barème § 32a 2026',
+ 'det.ann.r1.c': 'SVBezGrV 2026, Steuerfortentwicklungsgesetz',
+ 'det.ann.r2.a': 'Assujettissement maladie/dépendance des Versorgungsbezüge',
+ 'det.ann.r2.c': '§§ 229, 250 SGB V',
+ 'det.ann.r3.a': 'Abattement § 226 Abs. 2 S. 2 SGB V (maladie)',
+ 'det.ann.r3.c': 'incontesté',
+ 'det.ann.r4.a': 'Seuil et non abattement en assurance dépendance',
+ 'det.ann.r4.c': 'l’erreur la plus fréquente dans la littérature de conseil',
+ 'det.ann.r5.a': 'Exonération de cotisations du versement du compte AV',
+ 'det.ann.r5.c': 'ce ne sont pas des Versorgungsbezüge',
+ 'det.ann.r6.a': 'Moitié du montant différentiel pour les couches non subventionnées',
+ 'det.ann.r6.c': '§ 22 Nr. 5 S. 2 Buchst. b combiné au § 20 Abs. 1 Nr. 6 S. 2 EStG',
+ 'det.ann.r7.a': 'Abondement limité à l’économie effective de l’employeur',
+ 'det.ann.r7.c': 'la thèse contraire lit les 15 % comme un pur forfait',
+ 'det.ann.r8.a': 'Plafond de déduction 2 340 €',
+ 'det.ann.r8.c': 'HYPOTHÈSE DE MODÈLE. Décide si un enfant relève ou abaisse la valeur du compte AV',
+ 'det.ann.r9.a': 'Affiliation obligatoire KVdR à la retraite supposée',
+ 'det.ann.r9.c': 'les affiliés volontaires n’ont pas été examinés',
+ 'det.ann.notmodelled': '<b>Non modélisé :</b> décotes en cas de départ anticipé, effet de l’abandon de salaire sur les indemnités maladie, chômage et parentales, réversion, garantie en cas d’insolvabilité (PSVaG), portabilité en cas de changement d’employeur, réductions pour enfants en assurance dépendance, comparaison plus favorable du § 32d Abs. 6 EStG, protection contre la saisie et au titre du minimum vital, risque de longévité au-delà de l’horizon.',
+ 'det.prinzip': '<p>Comparer des <i>cotisations brutes</i> serait déloyal : l’abandon de salaire vient du brut, l’épargne privée du net. C’est pourquoi on égalise l’<b>effort net</b> :</p>'
+ + '<p style="font-family:var(--mono);font-size:.82rem;background:var(--chip);padding:9px 11px;border-radius:9px">effort net = cotisation brute − économie d’impôt sur salaire − part salariale de cotisations épargnée</p>'
+ + '<p>C’est exactement ce montant qui est investi dans les trois options. Ce qui reste est une comparaison d’<i>architectures d’incitation</i>, non de montants versés.</p>'
+ + '<p><b>Le report d’imposition est en soi sans valeur :</b> (1−t)·(1+r)ⁿ = (1+r)ⁿ·(1−t). La multiplication commute. Il ne reste que quatre facteurs de valeur :</p>'
+ + '<ol style="padding-left:1.2em;margin:.3em 0"><li>l’arbitrage de barème t₀ − t₁</li>'
+ + '<li>l’argent de tiers — abondement de l’employeur ou primes</li>'
+ + '<li>la capitalisation en franchise d’impôt — pas de Vorabpauschale</li>'
+ + '<li>les prélèvements nouveaux qui ne frappent qu’une option — maladie/dépendance sur les Versorgungsbezüge</li></ol>'
+ + '<p>Le point 4 est le désavantage dominant de la bAV, le point 2 son unique avantage structurel. Le rendement de la bAV <b>décroît strictement avec le montant cotisé</b>, parce que l’abattement est absolu et que son effet protecteur décroît comme 1/K — il n’existe pas d’optimum intérieur.</p>'
+ + '<p>Lorsque l’effort net est donné, la cotisation brute est retrouvée par dichotomie : N(B) est continue et strictement croissante (dN/dB = 1 − taux marginal de cotisations − taux marginal d’imposition > 0), mais elle n’est pas inversible en forme close à cause des points anguleux à 4 % et 8 % du BBG-RV, aux plafonds de cotisation et aux bornes du barème. 34 dichotomies donnent moins d’un dixième de centime.</p>',
+ 'det.t.prinzip': 'Le principe de comparaison',
+ 'det.t.erg': 'Résultat en détail',
+ 'det.s.erg': 'Les trois options coûtent en phase d’accumulation exactement le même montant net.',
+ 'det.t.mon': 'Prestation mensuelle, décomposée',
+ 'det.s.mon': 'Toutes les options rentifiées sur la même période, en pouvoir d’achat actuel. L’annuitisation étant linéaire, les lignes s’additionnent exactement.',
+ 'det.t.diag': 'Diagnostic',
+ 'det.s.diag': 'D’où cela vient — et où vous vous situez hors du couloir privilégié.',
+ 'det.t.anspar': 'Phase d’accumulation, année par année',
+ 'det.t.ausz': 'Phase de versement, année par année',
+ 'det.t.ann': 'Robustesse des hypothèses',
+
+ /* ---------------- Enregistrer et partager ---------------- */
+ 'msg.linkCopied': 'Lien copié. Qui l’ouvre voit exactement ces chiffres — rien de tout cela ne passe par un serveur.',
+ 'msg.linkFailed': 'La copie a échoué. Le lien se trouve maintenant dans la barre d’adresse.',
+ 'msg.loaded': 'Chargé.',
+ 'msg.loadError': function(p){ return 'Le fichier n’a pas pu être lu : ' + p.msg; },
+ 'msg.reset': 'Réinitialisé au cas de base.',
+
+ /* ---------------- PWA ---------------- */
+ 'pwa.offline': '<b>Fonctionne hors ligne.</b> L’application est désormais dans le cache du navigateur et tourne sans connexion. Pour l’installer : sur iPhone « Partager » → « Sur l’écran d’accueil », sur Android le menu → « Installer l’application ».',
+ 'pwa.installAsk': '<b>Installer comme application ?</b> Elle se placera alors sur l’écran d’accueil avec sa propre icône et fonctionnera hors ligne. ',
+ 'pwa.installBtn': 'Installer',
+ 'pwa.installed': '<b>Installée.</b> Vous trouverez l’application parmi vos autres applications.',
+ 'pwa.declined': 'Très bien — l’application fonctionne aussi ainsi, et hors ligne de surcroît.',
+ 'pwa.file': '<b>Vous avez ouvert le fichier directement</b> (<kbd>file://</kbd>). Tout se calcule, tout est enregistré. Seules manquent les deux propriétés PWA : pas d’icône sur l’écran d’accueil et pas de cache hors ligne — dont vous n’auriez de toute façon pas besoin ici, le fichier étant déjà sur l’appareil. Pour l’expérience complète, déposez le dossier sur n’importe quel hébergement HTTPS et ouvrez-le de là.'
+};
diff --git a/app/i18n.gmh.js b/app/i18n.gmh.js
new file mode 100644
index 0000000..5607a2d
--- /dev/null
+++ b/app/i18n.gmh.js
@@ -0,0 +1,623 @@
+/* =====================================================================
+ DIUTSCH — Mittelhochdeutsch, VOLLSTÄNDIG (459 Schlüssel).
+ Seit der zweiten Fassung auch die langen Erläuterungstexte übersetzt.
+ Von den drei historischen Stufen trägt das Mhd. Fließtext am besten:
+ Sachsenspiegel und städtisches Stadtrecht bieten echte Vorbilder für
+ Bedingungssätze mit „swer/swaz … der/daz“, „ob“ und „wande“, so dass
+ die neuen Passagen näher an gewachsener Rechtsprosa bleiben als beim
+ Gotischen oder Althochdeutschen. Vertrauensgrad in die Fließtext-
+ Syntax der neuen Passagen etwa 45–50 %; in die wiederverwendeten und
+ neu geprägten Fachwörter weiterhin die dokumentierten 65 %.
+
+ Neu geprägt, nach denselben Regeln wie die Kernliste oben:
+ anspruch Rechtsanspruch (belegt — echter mhd. Rechtsterminus,
+ nicht nur Neubildung)
+ zil Grenze/Bemessungsgrenze (belegt: „Ziel, Grenzpunkt“)
+ vrîheit Freibetrag/Freigrenze (belegt: „Freiheit“)
+ gemahel Ehe-/Lebenspartner (belegt: „Gemahl“)
+ wille Zustimmung (belegt: „Wille“, z. B. „âne des lôngeben
+ willen“)
+ gemeiniu sorge gesetzliche Sozialversicherung (gemeine + sorge)
+ Mathematische Formeln (N(B) = …, (1−t)(1+r)ⁿ) bleiben als Symbole
+ stehen, wie im Original.
+
+ ZUR SPRACHSTUFE. Klassisches Mittelhochdeutsch in Lachmannscher
+ Normalisierung: Längen mit Zirkumflex (â ê î ô û), æ und œ als Umlaute
+ von â und ô, iu als langes ü. Das ist die Schulorthographie, keine
+ Handschrift — aber die Form, in der das Mhd. gelesen und gelehrt wird.
+
+ ZUR WORTWAHL. Von den drei historischen Stufen ist diese mit Abstand
+ die tragfähigste, weil das Mhd. bereits eine städtische Geld- und
+ Rechtssprache hat. Mehrere Begriffe sind KEINE Neuprägung, sondern
+ treffen genau:
+ houbetguot Kapital, Hauptsumme (belegt — der Terminus)
+ lîpgedinge lebenslange Rente (belegt — die Leibrente)
+ gülte jährliche Rente, Zinsertrag aus Gut (belegt)
+ tiurunge Verteuerung, Preisanstieg (belegt — also: Inflation)
+ stiure Abgabe, Steuer (belegt)
+ wuocher Zins, Ertrag (belegt)
+ zins Abgabe, Zins (belegt)
+ gewin Gewinn (belegt)
+ koste Aufwand, Kosten (belegt)
+ lôn Lohn (belegt)
+ widermezzen vergleichen (belegt; ahd. schon bei Tatian)
+ siechtuom Krankheit (belegt)
+ alter, jâr, mânôt, teil, reht (belegt)
+ Gebildet, aber nicht belegt — mit mhd. Mitteln, Vertrauensgrad in die
+ Idiomatik etwa 65 %, also der höchste der drei Stufen:
+ widermezzunge Vergleich (zum belegten Verb, -unge produktiv)
+ lôngebe Arbeitgeber; lônman Arbeitnehmer
+ siechtuomsorge Krankenversicherung
+ altersorge Altersvorsorge
+ ETF bleibt als lateinische Fremdabkürzung stehen. Die Gesetzesfund-
+ stellen bleiben neuhochdeutsch: es gibt sie amtlich nur so.
+ ===================================================================== */
+window.I18N_GMH = {
+ 'f.I:gehalt.label': 'Jârlôn al, hiute',
+ 'f.I:beitrag.label': 'Mânôtgelt ze bAV, al',
+ 'f.I:netto_ziel.label': 'Mânôtlîchiu koste, lûter',
+ 'f.I:agzus.label': 'Zuolegunge des lôngeben',
+ 'f.I:agz_fix.label': 'Stætiu zuolegunge dar zuo',
+ 'f.I:agz_fix_dyn.label': 'Die stæten zuolegunge mêren',
+ 'f.I:agz_fix_dyn.o0': 'nâch namen, unverwandelt',
+ 'f.I:agz_fix_dyn.o1': 'mit dem lône',
+ 'f.I:agzus_sv.label': 'Wîse der zuolegunge',
+ 'f.I:agzus_sv.o0': 'allez gelt',
+ 'f.I:agzus_sv.o1': 'der vrîe teil aleine',
+ 'f.I:agzus_sv.o2': 'nâch der wârheit gerechent',
+ 'f.I:dyn.label': 'Daz gelt mêren',
+ 'f.I:dyn.o1': 'mit dem lône',
+ 'f.I:dyn.o0': 'nâch namen, unverwandelt',
+ 'f.I:rendite.label': 'Aller wuocher des ETF in dem jâre',
+ 'f.I:alter.label': 'Alter hiute',
+ 'f.I:alter.unit': 'jâr',
+ 'f.I:rentbeg.label': 'Anevanc der gülte',
+ 'f.I:rentbeg.unit': 'jâr',
+ 'f.I:kv_ruhe.label': 'Siechtuomsorge in dem alter',
+ 'f.I:kv_ruhe.o1': 'nâch rehte',
+ 'f.I:kv_ruhe.o2': 'eigen',
+ 'f.I:auszform.label': 'Ûzgift der bAV',
+ 'f.I:auszform.o1': 'houbetguot',
+ 'f.I:auszform.o2': 'lîpgedinge',
+ 'f.I:teilkap.label': 'Altersvorsorgedepot: einiu gâbe ze anevange',
+ 'f.I:av_auszform.label': 'Altersvorsorgedepot: daz ander',
+ 'f.I:av_auszform.o1': 'ûzgift nâch ordenunge',
+ 'f.I:av_auszform.o2': 'lîpgedinge',
+ 'f.I:agz_fix_min.label': 'Minnest eigen gelt ze der stæten zuolegunge',
+ 'f.I:rentfak_av.label': 'Gülte-mâze des Altersvorsorgedepot',
+ 'f.I:rentfak_av.unit': '€ ûf 10.000 €',
+ 'f.I:rentdyn_av.label': 'Mêrunge der schaz-gülte in dem jâre',
+ 'f.I:rentfak.label': 'Gülte-mâze der bAV',
+ 'f.I:rentfak.unit': '€ ûf 10.000 €',
+ 'f.I:rentdyn.label': 'Mêrunge der bAV-gülte in dem jâre',
+ 'f.I:fuenftel.label': 'Daz vünfte reht besuochen',
+ 'f.I:fuenftel.o0': 'nein (behuotlîche)',
+ 'f.I:fuenftel.o1': 'jâ',
+ 'f.I:planende.label': 'Zil der widermezzunge unz an daz alter',
+ 'f.I:planende.unit': 'jâr',
+ 'f.I:ausscheid.label': 'Ûzscheiden von dem werke',
+ 'f.I:ausscheid.unit': 'jâr',
+ 'f.I:tzalter.label': 'Halbez werc von dem alter',
+ 'f.I:tzalter.unit': 'jâr',
+ 'f.I:tzfaktor.label': 'Mâze des halben werkes',
+ 'f.I:gsteig.label': 'Mêrunge des lônes in dem jâre',
+ 'f.I:stkl.label': 'Wîse der stiure',
+ 'f.I:stkl.o1': 'sunder',
+ 'f.I:stkl.o3': 'samet (mit halbunge)',
+ 'f.I:partner.label': 'stiurgelt des gemahelen',
+ 'f.I:kist.label': 'Mâze des kirchenzinses',
+ 'f.I:tarifanp.label': 'Wandelunge der stiurzile in dem jâre',
+ 'f.I:kinder.label': 'Zal der kinde',
+ 'f.I:kind_jahre.label': 'Jâr mit kindes gâbe',
+ 'f.I:kind_jahre.unit': 'jâr',
+ 'f.I:kinderlos.label': 'Âne kint (zuolegunge ze der pflege)',
+ 'f.I:kinderlos.o0': 'nein',
+ 'f.I:kinderlos.o1': 'jâ',
+ 'f.I:k_bav.label': 'Koste des bAV-werkes in dem jâre',
+ 'f.I:k_av.label': 'Koste des Altersvorsorgedepot in dem jâre',
+ 'f.I:k_priv.label': 'Koste des eigenen ETF-schazhûses in dem jâre',
+ 'f.I:infl.label': 'Tiurunge in dem jâre',
+ 'f.I:sonst_zve.label': 'ander stiurgelt in dem alter',
+ 'f.I:rente_br.label': 'gülte nâch rehte, al, in dem jâre',
+ 'f.P:bbg_rv.label': 'Zil des geltes der altersorge (jærlich)',
+ 'f.P:bbg_kv.label': 'Zil des geltes siechtuomes und pflege',
+ 'f.P:bezug.label': 'Bezugsgröße (mânôtlich)',
+ 'f.P:de_rv.label': 'Lôn nâch der mitte (RV)',
+ 'f.P:rw.label': 'Wert des gülte-stückes nû',
+ 'f.P:rw.unit': '€',
+ 'f.P:rv_an.label': 'Altersorge gelt, teil des lônmannes',
+ 'f.P:av_an.label': 'Unwerkes gelt, teil des lônmannes',
+ 'f.P:kv_allg.label': 'Gemeiniu mâze der siechtuomsorge',
+ 'f.P:kv_zus.label': 'Zuolegunge der siechtuomsorge nâch der mitte',
+ 'f.P:pv_ges.label': 'Alliu mâze der pflege',
+ 'f.P:pv_an.label': 'Pflege, teil des lônmannes',
+ 'f.P:pv_kl.label': 'Pflege, zuolegunge der âne kint',
+ 'f.P:gfb.label': 'Grunt-vrîheit (ende des ringes 1)',
+ 'f.P:e2.label': 'Ende des ringes 2',
+ 'f.P:e3.label': 'Ende des ringes 3',
+ 'f.P:e4.label': 'Anevanc des ringes 5 (der rîchen stiure)',
+ 'f.P:a2.label': 'Mâzunge a₂',
+ 'f.P:b2.label': 'Mâzunge b₂',
+ 'f.P:a3.label': 'Mâzunge a₃',
+ 'f.P:b3.label': 'Mâzunge b₃',
+ 'f.P:c3.label': 'Stætez c₃',
+ 'f.P:c4.label': 'Stætez c₄',
+ 'f.P:c5.label': 'Stætez c₅',
+ 'f.P:soli.label': 'Gemeinschaft-zuolegunge',
+ 'f.P:soli_fg.label': 'Vrî zil der zuolegunge',
+ 'f.P:soli_mz.label': 'Senfter rinc, zil-swære',
+ 'f.P:an_pausch.label': 'Lônmanne abezuc, stæte',
+ 'f.P:sa_pausch.label': 'Sunderlîcher kost abezuc, stæte',
+ 'f.P:kapst.label': 'Mâze des schaz-zinses',
+ 'f.P:tfs.label': 'Halbiu vrîheit der teilschetze',
+ 'f.P:sparerpb.label': 'Sparennes abezuc, stæte',
+ 'f.P:basiszins.label': 'Grunt-wuocher der Vorabpauschale',
+ 'f.P:vp_faktor.label': 'Mâzunge des grunt-wuochers',
+ 'f.P:st_frei_q.label': 'stiurvrî § 3 Nr. 63 (teil BBG-RV)',
+ 'f.P:sv_frei_q.label': 'geltvrî (teil BBG-RV)',
+ 'f.P:zul_g1.label': 'Gâbe, stiege 1 (ûf ieglîchen € eigenes geltes)',
+ 'f.P:zul_s1.label': 'Zil der stiegen 1',
+ 'f.P:zul_g2.label': 'Gâbe, stiege 2 (ûf ieglîchen € eigenes geltes)',
+ 'f.P:zul_s2.label': 'Zil der stiegen 2',
+ 'f.P:kind_zul.label': 'Gâbe ûf ieglîchez kint',
+ 'f.P:av_max.label': 'Meiste ingift in dem jâre',
+ 'f.P:av_sa_max.label': 'Meister abezuc § 10a',
+ 'f.P:ertragsq.label': 'Teil des wuochers (alter 67)',
+ 'f.P:halb.label': 'stiurschuldiger teil des underscheides',
+
+ /* ---------------- Ramen, venstertitel ---------------- */
+ 'app.title': 'Altersorge-widermezzunge',
+ 'hdr.title': 'Altersorge&#8209;widermezzunge',
+ 'win.header': 'Altersorge-widermezzunge',
+ 'win.result': 'Ûzganc',
+ 'win.input': 'Iuwer wort',
+ 'win.chart': 'Gemælde',
+ 'win.extra': 'Anderiu wort',
+ 'win.calc': 'Wec der rechenunge',
+ 'win.share': 'Behalten und mite teilen',
+ 'win.min': 'Minren',
+ 'win.restore': 'Wider setzen',
+ 'win.n': function(p){ return 'Venster ' + p.n; },
+ 'ui.share': 'Bant mit mînen zalen abeschrîben',
+ 'ui.export': 'Als ein buoch behalten',
+ 'ui.import': 'Buoch laden',
+ 'ui.reset': 'Allez wider setzen',
+ 'ui.pin.set': 'Als ein rihte behalten',
+ 'ui.pin.clear': 'Die rihte lâzen',
+ 'ui.lang': 'Sprâche',
+ 'ui.lang.aria': 'Sprâche kiesen',
+ 'ui.lang.partial': 'niuwan ze teile gekêret',
+ 'ui.lang.partialNote': 'Disiu sprâche ist <b>ze teile gekêret</b>: daz antlütze, diu namen der steten, diu houbet der tavelen und diu zeichen der gemælde sint hie. Diu langen rehtes-tiutunge — diu wort under dem <span class="qm" style="cursor:default">?</span> bî den steten, daz urteil und der wec der rechenunge — erschînent in niuwem diutsche. Diu rehtes-schrift (BetrAVG, EStG, SGB V) sint in allen sprâchen diutsch: nâch ambet ensint sie anders niht.',
+ 'sb.up': 'Ûf ze dem ûzgange',
+
+ /* ---------------- Diu drî ---------------- */
+ 'opt.bav.name': 'bAV (lônes wandelunge)',
+ 'opt.bav.short': 'bAV',
+ 'opt.bav.nom': 'diu werkes altersorge',
+ 'opt.bav.satz': 'Diu werkes altersorge',
+ 'opt.bav.gen': 'der bAV',
+ 'opt.av.name': 'Altersvorsorgedepot',
+ 'opt.av.short': 'AV-schazhûs',
+ 'opt.av.nom': 'daz Altersvorsorgedepot',
+ 'opt.av.satz': 'Daz Altersvorsorgedepot',
+ 'opt.av.gen': 'des Altersvorsorgedepot',
+ 'opt.priv.name': 'eigen ETF-schazhûs',
+ 'opt.priv.short': 'eigen',
+ 'opt.priv.nom': 'daz eigene ETF-schazhûs',
+ 'opt.priv.satz': 'Daz eigene ETF-schazhûs',
+ 'opt.priv.gen': 'des eigenen ETF-schazhûses',
+
+ /* ---------------- Zeichen ---------------- */
+ 'metric.monat.label': 'Mânôtlîchiu gâbe',
+ 'metric.monat.unit': '€/mânôt',
+ 'metric.ertrag.label': 'Lûter gewin (wert nû)',
+ 'metric.ertrag.unit': '€',
+ 'metric.irr.label': 'Inner wuocher',
+ 'metric.irr.unit': '% in dem jâre',
+ 'metric.kapital.label': 'Houbetguot ze gülte-anevange',
+ 'metric.kapital.unit': '€',
+ 'metric.pa': ' in dem jâre',
+ 'metric.pp': ' teil hundert',
+ 'metric.short.monat': 'Mânôt',
+ 'metric.short.ertrag': 'Gewin',
+ 'metric.short.irr': 'IRR',
+ 'metric.short.kapital': 'Houbetguot',
+
+ /* ---------------- Stete der worte ---------------- */
+ 'unit.pct': '%',
+ 'unit.eur': '€',
+ 'unit.eurm': '€/mânôt',
+ 'ui.hintFor': function(p){ return 'Tiutunge ze: ' + p.label; },
+ 'ui.cnt.legal': function(p){ return p.n + ' rechenunge grœze'; },
+ 'ui.cnt.fields': function(p){ return p.n + ' stete'; },
+ 'group.bav': 'Zuolegunge und ûzgifte wîse in sunderheit',
+ 'group.person': 'Zît, ûzscheiden, halbez werc',
+ 'group.steuer': 'Stiure, stiure-wîse, kint',
+ 'group.markt': 'Koste und tiurunge',
+ 'group.ruhe': 'Alter',
+ 'group.p_sv': 'Rechenunge grœze: gemeiniu sorge 2026',
+ 'group.p_est': 'Rechenunge grœze: stiure des geltes 2026 (§ 32a EStG)',
+ 'group.p_kap': 'Rechenunge grœze: schaz- und teilschetze stiure',
+ 'group.p_bav': 'Rechenunge grœze: werkes und gegebeniu eigen sorge',
+
+ /* ---------------- Ûzganges tavelen ---------------- */
+ 'card.lead': 'vorne',
+ 'card.unchanged': 'unverwandelt',
+ 'base.pinned': 'Δ wider daz behalten',
+ 'base.delta': function(p){ return 'Δ ' + p.desc; },
+ 'base.none': 'Rüeret einen rihtære — diu wandelunge kumet hie als Δ.',
+ 'base.desc.prev': 'daz vordere',
+ 'base.desc.pinned': 'daz behalten',
+ 'base.desc.change': function(p){ return 'vor der wandelunge des „' + p.label + '“'; },
+ 'verdict.pp': function(p){ return p.v + ' teil hundert'; },
+
+ /* ---------------- Mitegândez bant ---------------- */
+ 'sb.cap': function(p){ return p.label + ' · ' + p.unit + (p.kaufkraft ? ', nâch hiutigem werde' : ''); },
+ 'sb.aria': function(p){ return 'Ûzganc: ' + p.label; },
+
+ /* ---------------- Gemælde ---------------- */
+ 'tab.sens': 'Enpfindunge',
+ 'tab.wf': 'Werdes trîbære',
+ 'tab.kap': 'Houbetguotes wec',
+ 'tab.zer': 'Mânôtes teilunge',
+ 'chart.error': function(p){ return 'Gemælde mac niht erschînen: ' + p.msg; },
+ 'sens.legendY': function(p){ return 'y: ' + p.label + ' (' + p.unit + ')'; },
+ 'wf.up': 'hœhet den gewin',
+ 'wf.down': 'nidert den gewin',
+ 'wf.legend': 'Wert nû des lûteren gewinnes, nâch hiutigem werde',
+ 'wf.barinfo': function(p){ return p.label + ': ' + p.note; },
+ 'wfb.vp.label': 'Abeval der Vorabpauschale',
+ 'wfb.zul.label': 'Gâben und sunderlîcher kost abezuc',
+ 'wfb.arch.label': 'Stiure-gezimber (daz ander)',
+ 'wfb.agz.label': 'Zuolegunge des lôngeben',
+ 'wfb.tarif.label': 'Stiure-underscheit und daz ander',
+ 'wfb.kvpv.label': 'Siechtuom und pflege über Versorgungsbezüge',
+ 'wfb.ep.label': 'Verlust der gülte-stücke',
+ 'kap.rentbeg': 'Gülte-anevanc',
+ 'kap.swap': 'Houbetguot → gülte-reht',
+ 'kap.legend': 'gezogen: al samet &nbsp;·&nbsp; gerizzen: vrîlich',
+ 'zer.netto': 'lûter',
+ 'zer.tax': 'stiure',
+ 'zer.kv': 'siechtuom/pflege',
+ 'zer.pension': 'gülte',
+ 'zer.legend': '<span><i style="background:#808080"></i>stiure</span><span><i style="background:#800000"></i>siechtuom/pflege</span><span><i style="background:#800080"></i>verlorniu gülte nâch rehte</span><span style="margin-left:auto">gevarwet grunt = daz dâ beliben ist</span>',
+
+ /* ---------------- Wec der rechenunge ---------------- */
+ 'det.h.bav': 'bAV',
+ 'det.h.av': 'AV-schazhûs',
+ 'det.h.priv': 'eigen',
+ 'det.h.kennzahl': 'Zeichen',
+ 'det.h.wert': 'Wert',
+ 'det.erg.netto': 'Allez ûz dem lûteren îngegeben (nâch namen)',
+ 'det.erg.fremd': 'Vremder schaz (zuolegunge oder gâben)',
+ 'det.erg.kapital': 'Houbetguot ze anevange der ûzgifte',
+ 'det.erg.brutto': 'Allez der alter ûzgifte',
+ 'det.erg.steuer': 'dar an geltes- und schaz-stiure',
+ 'det.erg.kvpv': 'dar an siechtuomsorge und pflege',
+ 'det.erg.rentenverlust': 'Verlust der gülte nâch rehte (gesamenet)',
+ 'det.erg.nettoausz': 'Allez der lûteren ûzgifte (nâch namen)',
+ 'det.erg.bwausz': 'Wert nû der lûteren ûzgifte',
+ 'det.erg.bwaufw': 'Wert nû der lûteren koste',
+ 'det.erg.ertrag': 'Wert nû des lûteren gewinnes',
+ 'det.erg.verhaeltnis': 'Mâze des gewinnes ze der koste',
+ 'det.erg.irr': 'Inner wuocher (nâch namen)',
+ 'det.erg.vorsprung': 'Vorlouf wider daz eigene schazhûs',
+ 'det.mon.brutto': 'Alliu gâbe bî dem mânôde',
+ 'det.mon.steuer': 'âne geltes- und schaz-stiure',
+ 'det.mon.kvpv': 'âne siechtuomsorge und pflege',
+ 'det.mon.ep': 'âne verlust der gülte nâch rehte',
+ 'det.mon.netto': 'LÛTER BÎ DEM MÂNÔDE (nâch hiutigem werde)',
+ 'det.diag.beitrag': 'Allez gelt bAV bî dem mânôde',
+ 'det.diag.aufwand': 'Lûteriu koste bî dem mânôde (êrstez jâr)',
+ 'det.diag.grenzsteuer': 'Zil-mâze der stiure in der samenunge (êrstez jâr)',
+ 'det.diag.ersparnis': 'Alliu sparennes mâze (stiure und gelt), êrstez jâr',
+ 'det.diag.svAG': 'wærlîchez sparen des lôngeben',
+ 'det.diag.svAN': 'wærlîchez sparen des lônmannes',
+ 'det.diag.ngef': 'Teil der bAV-gelte âne gâbe (êrstez jâr)',
+ 'det.diag.aussch': 'Nütze des rehtes (4 % BBG-RV)',
+ 'det.diag.agzVar': 'dar an zuolegunge: nâch hundert (êrstez jâr)',
+ 'det.diag.agzFix': 'dar an zuolegunge: stæter wert (êrstez jâr)',
+ 'det.diag.agzFixUeber4': 'stætiu zuolegunge über dem 4-%-vazze (niht gezalt als swære)',
+ 'det.diag.vbMonat': 'Versorgungsbezug bî dem mânôde ze anevange',
+ 'det.diag.freibetrag': 'Vrîheit Versorgungsbezüge in dem selben jâre',
+ 'det.diag.vbQuote': 'Mâze des Versorgungsbezug ze der vrîheit',
+ 'det.diag.kapFreiKapital': 'geltvrî müglich houbetguot (houbetguotes gâbe)',
+ 'det.diag.kapFreiRente': 'geltvrî müglich houbetguot (lîpgedinge)',
+ 'det.diag.memoRest': 'GEHÜGEDE: bAV-gülte-gâben nâch dem zile',
+ 'det.diag.memoRestAv': 'GEHÜGEDE: schaz-gülte nâch dem zile',
+ 'det.diag.wiederanl': 'Widerlegennes wuocher nâch den stiuren',
+ 'det.diag.kapstEff': 'wærlîchiu schaz-stiure mit zuolegunge und kirchenzinse',
+ 'det.diag.bestAnteil': 'Stiurschuldiger teil der gülte nâch rehte',
+ 'det.anspar.h.jahr': 'Jâr',
+ 'det.anspar.h.brutto': 'Al',
+ 'det.anspar.h.beitrag': 'bAV-gelt',
+ 'det.anspar.h.agzVar': 'Zuolegunge %',
+ 'det.anspar.h.agzFix': 'Zuolegunge stæte',
+ 'det.anspar.h.sv': 'Geltes sparen',
+ 'det.anspar.h.st': 'Stiure sparen',
+ 'det.anspar.h.netto': 'Lûteriu koste',
+ 'det.anspar.h.zul': 'Gâben',
+ 'det.anspar.h.kbav': 'Houbetguot bAV',
+ 'det.anspar.h.kav': 'Houbetguot AV',
+ 'det.anspar.h.kpriv': 'Houbetguot eigen',
+ 'det.row.year': function(p){ return p.jahr + ' (alter ' + p.alter + ')'; },
+ 'det.ausz.h.jahr': 'Jâr',
+ 'det.ausz.h.bavBr': 'bAV al',
+ 'det.ausz.h.kvpv': 'siecht./pflege',
+ 'det.ausz.h.steuer': 'Stiure',
+ 'det.ausz.h.mind': 'Gülte-minrunge',
+ 'det.ausz.h.bavNet': 'bAV lûter',
+ 'det.ausz.h.avBr': 'AV al',
+ 'det.ausz.h.avNet': 'AV lûter',
+ 'det.ausz.h.privBr': 'eigen al',
+ 'det.ausz.h.privNet': 'eigen lûter',
+ 'det.ann.h.annahme': 'Wænunge',
+ 'det.ann.h.vertrauen': 'Getriuwe',
+ 'det.ann.h.anmerkung': 'Merkunge',
+ 'det.ann.r1.a': 'Rechenunge grœze 2026, § 32a-stiure 2026',
+ 'det.ann.r1.c': 'SVBezGrV 2026, Steuerfortentwicklungsgesetz',
+ 'det.ann.r2.a': 'Schulde siechtuomes und pflege über Versorgungsbezüge',
+ 'det.ann.r2.c': '§§ 229, 250 SGB V',
+ 'det.ann.r3.a': 'Vrîheit § 226 Abs. 2 S. 2 SGB V (siechtuom)',
+ 'det.ann.r3.c': 'âne strît',
+ 'det.ann.r4.a': 'Zil an stat der vrîheit in der pflege',
+ 'det.ann.r4.c': 'diu meiste misseleitunge in râtgeben-schriften',
+ 'det.ann.r5.a': 'Geltvrîheit der AV-schazhûses ûzgifte',
+ 'det.ann.r5.c': 'ensint niht Versorgungsbezüge',
+ 'det.ann.r6.a': 'Halber underscheit ze ungegebenen teilen',
+ 'det.ann.r6.c': '§ 22 Nr. 5 S. 2 Buchst. b i.V.m. § 20 Abs. 1 Nr. 6 S. 2 EStG',
+ 'det.ann.r7.a': 'Zuolegunge unz ze dem wærlîchen sparenne des lôngeben',
+ 'det.ann.r7.c': 'diu ander wænunge liset diu 15 % als blôze stæte',
+ 'det.ann.r8.a': 'Sunderlîcher kost meiste 2.340 €',
+ 'det.ann.r8.c': 'WÆNUNGE DES BILDES. Urteilet, ob ein kint den wert des AV-schazhûses hœhet oder nidert',
+ 'det.ann.r9.a': 'KVdR-schuldigiu sorge in dem alter gewænet',
+ 'det.ann.r9.c': 'willeclîche gesorgete niht besuochet',
+ 'det.t.prinzip': 'Daz reht der widermezzunge',
+ 'det.t.erg': 'Ûzganc in sunderheit',
+ 'det.t.mon': 'Mânôtlîchiu gâbe, geteilet',
+ 'det.t.diag': 'Bekantnisse',
+ 'det.t.anspar': 'Samenunge-zît, jâr bî jâre',
+ 'det.t.ausz': 'Ûzgifte-zît, jâr bî jâre',
+ 'det.t.ann': 'Vestenunge der wænungen',
+
+ /* ---------------- Behalten und mite teilen ---------------- */
+ 'msg.loaded': 'Geladen.',
+ 'msg.loadError': function(p){ return 'Daz buoch enmohte niht gelesen werden: ' + p.msg; },
+ 'msg.reset': 'Wider gesetzet ûf den grunt.',
+
+ /* ---------------- PWA ---------------- */
+ 'pwa.installBtn': 'Setzen',
+ 'pwa.installed': '<b>Gesetzet.</b> Nû vindet ir daz werc bî den anderen.',
+
+ /* ---------------- Diu langen rehtes-tiutunge — diu ander stiege ---------------- */
+ 'f.I:gehalt.hint': 'Âne einwertes gâben. Ez setzet iuwer stiure-zil und ob ir über dem zile des geltes sît.',
+ 'f.I:beitrag.hint': 'Al gelt nâch rehte § 1a BetrAVG. Der anspruch stêt unz ze 4 teil hundert des zils des geltes RV; über dem bedarf ez des lôngeben willen.',
+ 'f.I:netto_ziel.hint': 'Der wert, des iuwer schaz minret in dem êrsten jâre — diu wærlîch verlâzen nütze. Der selbe wert wirt in allen drin wîsen geleget; daz ist ze rehter widermezzunge. Nâch dem stîget zil ie mêre, unde man mac ez wider rechenen.',
+ 'f.I:agzus.hint': 'Rehtes minneste sint 15 teil hundert (§ 1a Abs. 1a BetrAVG); manec lôngebe gît mêre. Ze widermezzenne wider daz eigene schazhûs, dâ zuolegunge und eigen schaz gelîch sint, mac man mit der rechenunge-mâze bekennen.',
+ 'f.I:agz_fix.hint': 'Stæte zuolegunge, gesetzet nâch stiure-triuwe oder werc-gedinge — als bî der Deutsche Bahn und maneger anderer triuwe, dâ diu zuolegunge 15 teil hundert § 1a Abs. 1a BetrAVG volleclîchen ervüllet. Daz ist des lôngeben gelt nâch § 3 Nr. 63 EStG und vüllet êrst daz 8-teil-hundert- und 4-teil-hundert-vaz (§ 1 Abs. 1 S. 1 Nr. 9 SvEV): iuwer eigen wandelunge wirt danne minner unde tiurre.',
+ 'f.I:agz_fix_dyn.hint': 'Gesetzete werte belîbent nâch namen in der triuwe unde wahsent aleine mit niuwen triuwen — daz êrste belîbet nâch namen unverwandelt. In 27 jâren unde 2 teil hundert tiurunge belîbet 1,02⁻²⁷ ≈ 0,59; swer daz ze wênic ahtet, der wele „mit dem lône“.',
+ 'f.I:agzus_sv.hint': '„Nâch der wârheit gerechent“ ist ein rehtes wort: § 1a Abs. 1a BetrAVG sol als vil zuolegen, als vil der lôngebe wærlîche an dem geltes sparen gewinnet. Ist iuwer lôn über beiden zilen, sô enspart er niht unde ensol er niht. Danâch wirt daz êrste rechenunge in dem schatze unz 21 teil hundert höveschet. Getriuwe in dirre rechenunge ist 75 teil hundert.',
+ 'f.I:dyn.hint': 'Ob daz gelt mit dem lône wehset, sô belîbet diu nütze des 8-teil-hundert-vazzes jærlîch gelîch. Ist ez aber nâch namen unverwandelt gesetzet, sô sinket sîn wert mit der tiurunge — unde diu lûter nütze, der diu andern zwei sich widermezzen suln, sinket gelîche.',
+ 'f.I:rendite.hint': 'Vür gewin, vür stiure. In allen drin wîsen daz selbe ETF — sô mac man einic der gezimber widermezzen, niht stiurvrîe urteil.',
+ 'f.I:alter.hint': 'Anevanc des sparennes. Jâr 0 = 2026.',
+ 'f.I:rentbeg.hint': 'Anevanc der gülte in allen drin wîsen. Daz Altersvorsorgedepot mac êrst von 65 jâren gegeben werden (niuwe gesetzet 2026).',
+ 'f.I:kv_ruhe.hint': 'Der mahtige kneht. In der rehten siechtuomsorge heizent werkes gelt Versorgungsbezüge unde tragent al stiure-mâze (§§ 229, 250 SGB V); ir altersorge entreget ez niht. Ein gesetzede hie wendet den wec.',
+ 'f.I:auszform.hint': 'Houbetguot: der ze eime mâle gegebene stiure-al wirt über 120 mânôden geteilet (§ 229 Abs. 1 S. 3 SGB V). Diu gülte nâch rehte spreitet dise gâbe über daz ganze leben unde schirmet sô mêr schaz under der selben vrîheit. Diz bilde mac al oder niht kiesen; halbez houbetguot der bAV enist niht gebildet hie.',
+ 'f.I:teilkap.hint': 'Unz ze 30 teil hundert des gesameneten schatzes mac ze anevange der gülte als ein einiu gâbe genomen werden — in beiden wîsen. Der koste hât zwô fresen: al der wahs in dem einen jâre genomen wirt, unde dar nâch wuochert aleine nâch dem stiure-zile. Der öberste wert des jâres (der „sleeve“) âne stiure-gelt gegeben wirt; daz ist des bildes site, niht rehtes stücke.',
+ 'f.I:av_auszform.hint': 'Daz, sô mit dem schatze nâch der einen gâbe getân wirt — sunder von der bAV-gesetzede. Ordenunge der gülte: der schaz wirt gesamenet unde mit wuochere gegeben; der ungegebene teil wirt mit halbem underscheide verstiuret. Gülte nâch rehte: houbetguot gât ze dem lôngeben, doch der ungegebene teil aleine mit dem teile des ackers verstiuret wirt (§ 22 Nr. 5 S. 2 Buchst. a EStG, 17 teil hundert von 67 jâren, hie 26 teil hundert). Der gegebene teil in beiden wîsen al widergolten wirt, daz enwendet sich niht.',
+ 'f.I:agz_fix_min.hint': 'Gelîche bilde binden den gesetzeten wert ze dem minnesten eigenen gelte. 0 heizet âne bant — sô gât diu zuolegunge in ieglîchem jâre des werkes, ouch mit deheinem gelte. Ze bedenkenne: ein wærez âne-bant-zuolegunge wære niht underscheit des wandelunges-bandes unde wære wider bAV geleget, ouch ob ez âne wandelunge gienge. Schrîbet aleine daz an, daz wærlîche ze teile hanget.',
+ 'f.I:rentfak_av.hint': 'Ein mâze ze dem schatze, der gülte wirt. Gesetzet als bî der bAV; des schatzes triuwe mac âne siechtuomsorge sîn unde alsô bezzer sîn. Bî 0 enist niht gülte.',
+ 'f.I:rentdyn_av.hint': 'Übervolge teil oder mâze des wahses in gülte-zîten der schatzes triuwe.',
+ 'f.I:rentfak.hint': 'Ein mâze ze der gâbe-wîse „gülte“. 26 € mânôtlîch gülte bî 10.000 € ist als 3,1 teil hundert genomen. Stêt in dem buoche der werc-getriuwede.',
+ 'f.I:rentdyn.hint': 'Übervolge teil oder mâze des wahses in gülte-zîten.',
+ 'f.I:fuenftel.hint': '§ 34 EStG bî geordenter houbetguotes gâbe von § 3 Nr. 63-triuwen nâch BFH X R 23/15 dâ zuo wirt genutzet. Gewis: nein.',
+ 'f.I:planende.hint': 'Ordenunge der gülte gât unz hie. Gülte nâch rehte wirt nâch dem selben zile widermezzen; daz, sô dar nâch gât, stêt als gehügede under „Bekantnisse“. Swer alt wirt, der gewinnet dâ.',
+ 'f.I:ausscheid.hint': 'Von hie enkein lôn, enkein gelt. Der schaz wuochert unz ze anevange der gülte.',
+ 'f.I:tzalter.hint': 'Ieglîch wert wirt von anevange der gülte gezalt: niht halbez werc. Gesetzet ist 67.',
+ 'f.I:tzfaktor.hint': 'Teil des vollen werkes lônes. 60 teil hundert = 60-teil-hundert stat.',
+ 'f.I:gsteig.hint': 'Unde treget vor daz zil des geltes, Bezugsgröße, mittelen lônes unde der stiure werte.',
+ 'f.I:stkl.hint': 'Mahtic ist DIU STIURE-WÎSE, niht der lônes stiure-flôc: der flôc rihtet ieglîches jâres abezuc, jærlîche buoch rechenent doch mit halbunge nâch § 32a Abs. 5 EStG. Bî „samet“ nôtdurftic schrîbet an den stiure-wert des gemahelen.',
+ 'f.I:partner.hint': 'Ein mâze ze samentlîcher stiure. Wirt gerechent 2·ESt((zvE + zvE_gemahel)/2).',
+ 'f.I:kist.hint': '8 teil hundert in Bayern unde Baden-Württemberg, anderswâ 9, 0 dem ûzgetretenen von der kirchen. Unde daz stiuregelt heizet: 0,25/(1+0,25k)·(1+0,055+k).',
+ 'f.I:tarifanp.hint': 'Al gelt wirt mit dem werkes-gewinne λ = (1+x)^t gemezzen gewahsen: ESt = s·λ·T(zvE/s/λ). Daz ist alsô, als alle zil-marke gelîche wahsent. 0 teil hundert zeiget al kalten wahs.',
+ 'f.I:kinder.hint': 'Kindes gâbe in Altersvorsorgedepot: 1 € ûf ieglîchen € eigenes geltes, unz 300 € bî dem kinde.',
+ 'f.I:kind_jahre.hint': 'Diu kindes gâbe hât an der maht des kindes-lônes (§ 85 EStG), sô gât niht al durch daz sparen.',
+ 'f.I:kinderlos.hint': '0,6 teil hundert zuolegunge ze der sorge-gâbe, dem âne kint (§ 55 Abs. 3 SGB XI).',
+ 'f.I:k_bav.hint': 'Siechtuomsorge-mâze unde TER. Wærlîche nütze stânt in dem buoche der werc-getriuwede — dâ sehet, niht urteilet dar ûf.',
+ 'f.I:k_av.hint': 'Bî geordentem schatze sint wærlîche nütze nâch rehte gesetzet unz ze 1,0 teil hundert bî dem jâre.',
+ 'f.I:k_priv.hint': 'Blôz TER breiter werlt-ETF.',
+ 'f.I:infl.hint': 'Sinket al wert ze „nâch hiutigem werde“. Wênic wendet diu rihte, doch al hœhe.',
+ 'f.I:sonst_zve.hint': 'Êrst der stiureschuldige teil der stiure nâch rehte, âne den hie geleiten schaz. Daz setzet zil des stiure-mâzes in zîten der gülte — unde alsô stiure-underscheit t₀ − t₁.',
+ 'f.I:rente_br.hint': 'Ein mâze in der siechtuomsorge: gülte nâch rehte unde Versorgungsbezüge teilent ein zil des geltes (§ 223 Abs. 3 SGB V).',
+ 'f.P:bbg_rv.hint': 'SVBezGrV 2026 (BGBl. 2025 I Nr. 116), gelîche in dem ganzen rîche.',
+ 'f.P:bbg_kv.hint': 'SVBezGrV 2026; 5.812,50 € bî dem mânôde.',
+ 'f.P:bezug.hint': 'SVBezGrV 2026, 47.460 € bî dem jâre. Ein zehende teil ist diu vrîheit Versorgungsbezüge in der siechtuomsorge (§ 226 Abs. 2 S. 2 SGB V).',
+ 'f.P:de_rv.hint': 'Zuoschrift 1 ze SGB VI, wert 2026 — diu zal des gülte-stückes.',
+ 'f.P:rw.hint': 'Rentenwertbestimmungsverordnung 2026, von 1.7.2026: 42,52 € (+4,24 teil hundert).',
+ 'f.P:rv_an.hint': '18,6 teil hundert, halp unde halp.',
+ 'f.P:av_an.hint': '2,6 teil hundert, halp unde halp.',
+ 'f.P:kv_allg.hint': '§ 241 SGB V.',
+ 'f.P:kv_zus.hint': 'Kunt des BMG; ieglîchiu sorge anders — schrîbet an iuwer eigen zuolegunge.',
+ 'f.P:pv_ges.hint': '§ 55 SGB XI. Kindes minrunge von anderem kinde enist niht gebildet.',
+ 'f.P:pv_an.hint': 'In Sachsen anders (2,3 teil hundert).',
+ 'f.P:pv_kl.hint': '§ 55 Abs. 3 SGB XI, dem âne kint.',
+ 'f.P:gfb.hint': '§ 32a Abs. 1 EStG nâch dem Steuerfortentwicklungsgesetz.',
+ 'f.P:e2.hint': 'Zil des stiure-mâzes wehset von 14 ze 23,97 teil hundert.',
+ 'f.P:e3.hint': 'Zil des stiure-mâzes wehset von 23,97 ze 42 teil hundert.',
+ 'f.P:e4.hint': 'Von 277.826 € gelîchet 45 teil hundert.',
+ 'f.P:a2.hint': 'ESt = (a₂·y + b₂)·y, y = (zvE − grunt-vrîheit)/10.000.',
+ 'f.P:a3.hint': 'ESt = (a₃·z + b₃)·z + c₃, z = (zvE − 17.799)/10.000.',
+ 'f.P:c4.hint': 'ESt = 0,42·zvE − c₄.',
+ 'f.P:c5.hint': 'ESt = 0,45·zvE − c₅.',
+ 'f.P:soli.hint': 'SolzG 1995.',
+ 'f.P:soli_fg.hint': '2026, grunt-vrîez gelt, nâch dem rehten ESt; bî samentlîchem zwivalt. Unde ein senfter zil.',
+ 'f.P:soli_mz.hint': '§ 3 Abs. 2a SolzG.',
+ 'f.P:an_pausch.hint': '§ 9a S. 1 Nr. 1a EStG.',
+ 'f.P:sa_pausch.hint': '§ 10c EStG.',
+ 'f.P:kapst.hint': '§ 32d Abs. 1 EStG.',
+ 'f.P:tfs.hint': '§ 20 Abs. 1 Nr. 3 mit § 20 InvStG, teil aktien über 50 teil hundert.',
+ 'f.P:sparerpb.hint': '§ 20 Abs. 9 EStG; bî samentlîchem zwivalt. Verzîhet den meisten teil der Vorabpauschale — sehet daz urteilen in dem wertes-loufe.',
+ 'f.P:basiszins.hint': 'BMF-schrift von 13.01.2026, § 18 Abs. 4 InvStG (2025: 2,53 teil hundert). Gesetzet ze 0: niht Vorabpauschale.',
+ 'f.P:vp_faktor.hint': '§ 18 Abs. 1 S. 1 InvStG.',
+ 'f.P:st_frei_q.hint': '8 teil hundert BBG-RV = 8.112 € in 2026.',
+ 'f.P:sv_frei_q.hint': '§ 1 Abs. 1 S. 1 Nr. 9 SvEV; 4 teil hundert = 4.056 € in 2026. Ebenso daz zil des anspruches nâch § 1a BetrAVG.',
+ 'f.P:zul_g1.hint': 'Altersvorsorgereformgesetz, kreftic von Meien 2026, genutzet von 1.1.2027.',
+ 'f.P:zul_s1.hint': 'Unz 360 € eigenes geltes: 50 schatze bî dem €.',
+ 'f.P:zul_g2.hint': 'Von 361 unz 1.800 €: 25 schatze bî dem €.',
+ 'f.P:zul_s2.hint': 'Meiste gâbe des eigenen geltes; machet meist grunt-vrîe gâbe 540 €.',
+ 'f.P:kind_zul.hint': '1 € ûf ieglîchen € eigenes geltes, unz 300 € bî dem kinde.',
+ 'f.P:av_max.hint': 'BMF-vrâge bî niuwer gesetzede der sînen sorge, 05.05.2026. Daz öberste gât in anderm wege, ez wirt gezalt als eigen schaz.',
+ 'f.P:av_sa_max.hint': 'GESETZEDE DES BILDES, getriuwe 70 teil hundert. Eigen gelt unz 1.800 € unde gâben. Diz mâze aleine urteilet, ob ein kint den wert des AV-schatzes hœhet oder nidert.',
+ 'f.P:ertragsq.hint': '§ 22 Nr. 1 S. 3 Buchst. a Doppelbuchst. bb EStG, ze ungegebenen teilen des geltes.',
+ 'f.P:halb.hint': '§ 20 Abs. 1 Nr. 6 S. 2 EStG gelîche (triuwe über 12 jâr, gâbe nâch 62): halber underscheit. Getriuwe 80 teil hundert.',
+
+ /* ---------------- Al wort, vuoz, zeichen ---------------- */
+ 'app.meta': 'Werkes altersorge, Altersvorsorgedepot unde eigen ETF-schazhûs widermezzen nâch der selben lûteren nütze. Rehtes stant 2026.',
+ 'hdr.sub': 'Werkes altersorge, Altersvorsorgedepot unde eigen ETF-schazhûs &mdash; nâch <b>der selben lûteren nütze</b> unde dem selben ETF. Rehtes stant 2026.',
+ 'input.sub': 'Diz rechenunge wirt sâ niuwe bî ieglîcher wandelunge. Mit <span class="qm" style="cursor:default">?</span> tiutet ieglîchiu stat sich selben.',
+ 'extra.sub': 'Allez hie hât guote vorgesetzede. Enrüeret ez niht, ob ez iu niht gezimet.',
+ 'calc.sub': 'Allen, die disem wege volgen wellen.',
+ 'share.sub': 'Iuwer wort sint aleine in disem werke (<kbd>localStorage</kbd>). Niht wirt gesendet, enist deheiniu maht noch spehære.',
+ 'footer.1': '<b>Enist niht rehtes noch schatzes rât.</b> Daz bilde enist niht triuwe. Rehtes stant 2026 nâch der niuwe der sînen sorge ist in manegen steten noch niht geendet; dise gesetzede mit minnestem getriuwe stânt under „Wec der rechenunge → Vestenunge der wænungen“ unde mügen dâ gewendet werden.',
+ 'footer.2': 'Der rechenunge kerne ist aleine von dem Excel-bilde <span class="pill">bAV-DYNO_vs_Altersvorsorgedepot_vs_ETF.xlsx</span> abegeleitet unde wider drî fresen nâch des sumeres rihte gekoret (meiste gelîche underscheit 1,3·10<sup>&minus;14</sup>).',
+ 'metric.monat.desc': 'Gelîchiu mânôtlîchiu gâbe al gülte-zît mit dem selben werte, nâch hiutigem werde. Ein mâze, daz man widermezzen mac mit iuwerem lûteren schatze nû.',
+ 'metric.ertrag.desc': 'Daz, sô diz nâch hiutigem werde über iuwer eigen werc tuot: der wert nû aller lûteren gâben âne den wert nû der lûteren nütze.',
+ 'metric.irr.desc': 'Wuocher an dem wærlîche gelegeten lûteren schatze, nâch namen. Widermezzet mit dem gesetzeten allen wuochere des ETF — der underscheit ist der, daz gâbe unde gelt zesamene kosten oder gebent.',
+ 'metric.kapital.desc': 'Vür stiure unde vür gelt, nâch namen. Ze willen ENIST niht diz mâze: bAV mac hie mêre vor sîn, doch verliuset in der gâbe.',
+ 'ui.couple': '<span>⇅</span> Zwei sehent an daz selbe mâze. Wendet einez, daz ander volget.',
+ 'ui.legalNote': 'Rehtes grœze mit buoches stat. Wendet einez, ob reht gewendet ist oder iuwer sorge anders ist.',
+ 'n.beitrag.ueber8': function(p, f){
+ return 'Über 8 teil hundert des zils des geltes RV (' + f.eur(p.v8) + ' bî dem jâre). Dirre teil '
+ + 'ist über dem weder stiurschuldic noch geltschuldic — gât in die siechtuomsorge unde dâ '
+ + 'wirt niht genomen âne siechtuomsorge aleine.'; },
+ 'n.beitrag.ueber4': function(p, f){
+ return 'Über 4 teil hundert des zils des geltes RV (' + f.eur(p.v4) + ' bî dem jâre). Unz hie '
+ + 'habet ir den anspruch nâch § 1a BetrAVG, über dem bedarf ez des lôngeben willen.'; },
+ 'n.agzus.gedeckelt': function(p, f){
+ return 'Gezilet bî ' + f.pct(p.quote, 1) + '. Der lôngebe spart wærlîche ' + f.eur2(p.ersparnis)
+ + ' bî dem jâre — hœher werte wenden hie niht, unz diu wîse „nâch der wârheit gerechent“ stêt.'; },
+ 'n.agz_fix.fliesstNicht': function(p, f){
+ return 'Ez gât niht: iuwer mânôtlîch gelt ' + f.eur2(p.beitrag) + ' ist under dem minnesten zile '
+ + f.eur2(p.schwelle) + ' (sehet „Anderen worten“).'; },
+ 'n.agz_fix.ueber4': function(p, f){
+ return 'Diu gesetzete zuolegunge geht al über daz 4-teil-hundert-vaz (' + f.eur(p.topf)
+ + ' bî dem jâre) mit ' + f.eur(p.ueber) + '. Dirre teil wære iu lôngeben lôn — daz bilde '
+ + 'enrechenet dise mêre swære niht, unde urteilet sô ze guote der bAV.'; },
+ 'n.agz_fix.verdraengung': function(p, f){
+ return 'Vüllet êrst daz 4-teil-hundert-vaz: von iuwerem eigenen gelte belîbet ' + f.eur(p.rest)
+ + ' geltvrî. Iuwer lûter nütze wehset danne — diu zuolegunge ist doch gegebener schaz, '
+ + 'aleine wendet ez iuwer eigene zil.'; },
+ 'n.agz_fix.ueber8': 'Zesamene mit dem eigenen gelte über 8 teil hundert BBG-RV — daz öberste ist weder stiurschuldic noch geltschuldic.',
+ 'n.agz_fix_min.knapp': function(p, f){
+ return 'Ir sît aleine ' + f.eur2(p.d) + ' über dem zile. Under dem verliuset diu gesetzete '
+ + 'zuolegunge al: wuocher des lezzesten geltes-€ ist hie ungewis, bant al ↔ lûter dâ '
+ + 'unstæte.'; },
+ 'n.agz_fix_min.verfehlt': function(p, f){
+ return 'Zil niht errecket — ' + f.eur2(p.fehlt) + ' mêre bî dem mânôde brahten ' + f.eur2(p.zuschuss)
+ + ' zuolegunge. Daz ist ie der beste € in dem ganzen bilde.'; },
+ 'n.teilkap.kosten': function(p, f){
+ return 'Koste ' + (p.gewinn ? 'niht, doch: ' + p.dtxt : p.dtxt + ' ' + p.unit)
+ + ' wider daz mâze der stiure-gelîcheit. Fresen: der eine gâbe in eime jâre al '
+ + 'stiurschuldic ist (zil-swære dâ ' + f.pct(p.grenz, 1) + ') unde danâch wuochert aleine '
+ + 'nâch dem stiure-zile, niht nâch des bildes acker.'; },
+ 'n.av_auszform.horizont': function(p, f){
+ return 'Über dise widermezzunges-zil gilt daz gelt noch ' + f.eur(p.rest) + ', daz hie NIHT '
+ + 'gerechent wirt. Gesetzetez zil minret ieglîche gülte nâch rehte — swer alt wirt, der '
+ + 'gewinnet dâ.'; },
+ 'rank.swap': function(p, f){
+ return '<b>Diu zeichen sich niht gelîchent.</b> Nâch mânôtlîcher gâbe ist ' + p.a + ' vor wider '
+ + p.b + ', nâch hiutigem werte des lûteren gewinnes ist ez anders. Fresen: der wert nû '
+ + 'sinket mit der tiurunge (' + f.pct(p.infl, 2) + '), diu mânôtlîch gâbe gilt mit dem '
+ + 'widerlegenden wuochere nâch gülte (' + f.pct(p.wiederanl, 2) + '). Als verre dise zwei '
+ + 'sich scheident, sô bezzer stêt gegeben houbetguot. Welch zeichen gilt, hât an dem, ob ir '
+ + 'legen wellet oder verzeren — bî „verzeren“ setzet den wert in „Nütze sînes ETF-schatzes“, '
+ + 'sô daz der widerlegende wuocher ze niht gât.'; },
+ 'warn.unreachable': 'Diu lûter nütze mac niht errecket werden — über iuwerem lône. Gesetzet ist der höhste müglîche wert.',
+ 'warn.inactive': 'In dem êrsten jâre nâch iuwern worten sît ir niht in dem werke — deheiniu wandelunge des lônes, sô deheiniu lûter nütze, der al gelt wider gerechent werden möhte. Sehet „Ûzscheiden von dem werke“ unde „Alter hiute“.',
+ 'verdict.lead': function(p){
+ return '<b>' + p.satz + '</b> ist vor mit ' + p.wert + ' — ' + p.d2 + ' mêre danne ' + p.nom2
+ + (p.nom3 ? ' unde ' + p.d3 + ' mêre danne ' + p.nom3 : '') + '.'; },
+ 'verdict.top': function(p, f){
+ return ' Diu meiste einic stat in disem mâze ' + p.gen + ' wider daz eigene schazhûs ist „'
+ + p.label + '“ — unde ' + (p.pro ? 'ze guote' : 'ze schaden') + ' ' + p.gen + ', mit '
+ + f.eur(p.wert) + ' werte nû. Al teilunge stêt under „Wertes bekantnisse“.'; },
+ 'verdict.band': function(p, f){
+ return '<span class="band">Wie veste ist daz? Bî allem wuochere ' + f.pct(p.lo, 1) + ' unz ze '
+ + f.pct(p.mid, 1) + ' wære daz ' + p.vlo + ', bî ' + f.pct(p.hi, 1) + ' wære ' + p.vhi
+ + ' — daz bekantnisse '
+ + (p.stabil ? 'in disem mâze gelîch belîbet.'
+ : '<b>in disem mâze anders wirt</b>, daz bekantnisse treget hie niht.')
+ + '</span>'; },
+ 'demo.text': '<b>Diz sint noch bildes werte</b> — 40 jâr alt, 75.000 € jærlîch al lôn, 300 € lônes wandelunge bî dem mânôde, rehte siechtuom. Schrîbet under „In iuwern worten“ diu iuwer; diz gehügede danne selbe gât.',
+ 'sens.readout': 'Gemezzen: iuwer wert nû. Ringe: mâzunge stat mit dem sînem schatze. Über disem wege varet oder rüeret ze werten.',
+ 'sens.note': function(p){
+ return 'Der lezzeste gerüerte rihtære wirt al durch sîn mâze gerechent — ' + p.n
+ + ' vollez bildes umbeloufen. Nû: „' + p.label + '“. Rüeret einen andern rihtære, unde der '
+ + 'wec wendet sich mite.'; },
+ 'sens.noteNetto': function(p, f){
+ return ' Sehet: der rihtære unde diu lûter nütze wirt (hie ' + f.eur2(p.lo) + ' unz '
+ + f.eur2(p.hi) + ' bî dem mânôde) unde sô der wert, der in allen drin wîsen geleget wirt. '
+ + 'Dâ mügen diu drî ringe bî ieglîchem x rehte gelîchen werden, doch diu hœhe mit andern x '
+ + 'niht. Diu winkel sint bî zilen des geltes (' + f.eur(p.bbgkv) + ' ze KV/PV, '
+ + f.eur(p.bbgrv) + ' ze RV/AV) unde bî stiure-zilen.'; },
+ 'wf.check': function(p, f){
+ return 'Fresen: ' + f.eur(p.start) + ' + ' + f.eur(p.summe) + ' = ' + f.eur(p.start + p.summe)
+ + ' (solde ' + f.eur(p.ende) + ' sîn, underscheit ' + f.nf2(p.start + p.summe - p.ende) + ' €).'; },
+ 'wf.note': 'Al geteilet von dem ende, doch rehte gerechent — doch ist <b>rehtes werc</b>: diu maht mügen niht getrennet werden, ieglîch stap mizzet teil <i>gezimlîch</i> dem dar über. Rüeret den stap ze bekantnisse.',
+ 'wfb.vp.note': 'Weder bAV noch Altersvorsorgedepot künnen Vorabpauschale (§ 18 InvStG). Gemezzen als eigen schaz âne unde mit Vorabpauschale. Der stap mac sinken: diu Vorabpauschale gât vil in des sparennes teil, doch hebet al koste-grunt — unde sô ist ze eigenem schatze teil bezzer.',
+ 'wfb.zul.note': 'Vremder schaz nâch niuwem gülte-bilde unde abezuc nâch § 10a EStG. Gemezzen mit lâzen beider wege.',
+ 'wfb.arch.note': 'Stiure-underscheit t₀ − t₁ unde al ander. Daz belibende rihtet, daz diu kette rehte gât.',
+ 'wfb.agz.note': 'Vremder schaz — daz einige gezimber bezzer der bAV, daz niht von rehte kumet. Gemezzen mit lâzen dirre zuolegunge.',
+ 'wfb.tarif.note': 'Zil des stiure-mâzes bî gelte âne bî nemen, unde al ander. Daz belibende rihtet, daz diu kette rehte gât. Stiure mêrunge ist niht: (1−t)(1+r)ⁿ = (1+r)ⁿ(1−t), manecvalt wendet niht den wert.',
+ 'wfb.kvpv.note': '§§ 229, 250 SGB V: al stiure-mâze treget der geltes niezer. Gemezzen als underscheit wider gesetzede „sîn siechtuom in dem alter“.',
+ 'wfb.ep.note': 'Lônes wandelunge minret des lôngeben lôn unde sô gülte nâch rehte. Lûter gerechent.',
+ 'kap.readout': function(p, f){
+ return 'Ze anevange der gülte gebunden: bAV ' + f.eur(p.bavGeb) + ' von ' + f.eur(p.bav)
+ + ' · AV-schazhûs ' + f.eur(p.avGeb) + ' von ' + f.eur(p.av)
+ + ' · eigen schaz ' + f.eur(0) + ' von ' + f.eur(p.priv)
+ + '. Diu gelîche mânôtlîche gâbe genomen wirt, sô ieglîchiu wîse ze niht endet.'; },
+ 'kap.note': function(p, f){
+ return 'Der schaz stêt in dem bilde, in zîten der gülte mit lûteren widergelegeten gâben wehset'
+ + ' (' + f.pct(p.wiederanl, 2) + ' nâch gülte) unde âne dise gelîche mânôtlîche gâbe, '
+ + 'wærlîche genomen. Sô ieglîchiu wîse rehte ze niht gât. Wande daz nemen aleine von dem '
+ + 'widerlegen gât, unde daz bildes houbetguot in dem bilde belîbet, dâ mit des bildes acker '
+ + 'vür stiure wehset, doch die ringe niht gelîche gânt. — Diz gezilte reht ist der vrîe '
+ + 'genutzte teil: bAV unz ze der gülte anevange al gebunden ist (§ 1b BetrAVG kan '
+ + 'unverlorne maht, niht vrîheit), ze Altersvorsorgedepot nemen vor 65 jâren schade ist, '
+ + 'unde vrî aleine daz öberste über des jâres meistem werte, eigen schaz ist ie vrî. Daz ist '
+ + 'der einige wec, dâ houbetguotes gâbe guot insihet. '
+ + (p.verrentet ? 'Wande ir daz gelt gültet, dâ gât ouch daz houbetguot ze dem lôngeben — der '
+ + 'ring sinket dar nâch, ouch ob niht verlorn ist. ' : '')
+ + 'Unde aber gewis: die ringe zeigent daz eigen von DISEM EINEN wege, niht al iuwer eigen.'; },
+ 'zer.readout': 'Al als gelîche mânôtlîche gâbe nâch hiutigem werte. Wande rehte gilt, geteilunge rehte zesamene rechenent.',
+ 'zer.note': function(p, f){
+ return 'Diu zît ist gelîch in allen drin wîsen. Ein gâbe des houbetguotes enwirt niht in '
+ + 'zwelfen geteilet, doch mit dem widerlegenden wuochere nâch gülte (' + f.pct(p.wiederanl, 2)
+ + ' bî dem jâre) in derselben zît gegolten. Swer disen schaz verzert in stat legenne, der '
+ + 'stêt wirser.'; },
+ 'det.warn.lead': 'Ir stât ûzer disem geratenen wege: ',
+ 'det.warn.aussch': 'Über 100 teil hundert der nütze enist niht anspruch ze der lônes wandelunge. ',
+ 'det.warn.ngef': 'Der meiste teil der gelte ist weder stiurschuldic noch geltschuldic — dirre teil gât in die siechtuomsorge, âne niht genomen âne siechtuomsorge aleine. ',
+ 'det.warn.vb': 'Daz Versorgungsbezug gât über diu vrîheit swidelîche; diu schirmede der ganzen vrîheit sinket als 1/houbetguot. ',
+ 'det.ann.intro': 'Diz bekantnisse hât an rehtes vrâgen, der 2026 noch niht alle geendet sint. Diu rechenunge in klammern sint eigen getriuwe.',
+ 'det.ann.notmodelled': '<b>Niht gebildet:</b> minrunge vor des alters gülte, wandelunge des lônes âne siechtuom-, arbeitlôs- unde kindes-lôn, nâch lebenden sorge, unmaht des getriuwens (PSVaG), wehsel ze anderem lôngeben, kindes minrunge in der pflege, guote fresen nâch § 32d Abs. 6 EStG, endes- unde grunt-vrîheit, langes lebens über zil.',
+ 'det.prinzip': '<p>Widermezzen <i>aller gelte</i> wære niht reht: lônes wandelunge kumet von dem al, eigen sparen kumet von dem lûteren. Sô werdent diu <b>lûter nütze</b> gelîche gemachet:</p>'
+ + '<p style="font-family:var(--mono);font-size:.82rem;background:var(--chip);padding:9px 11px;border-radius:9px">Lûter nütze = al gelt − geltes sparen − teil des lôngeben</p>'
+ + '<p>Der selbe wert in allen drin wîsen geleget wirt. Daz belibende ist widermezzunge der gezimber, niht der gülte hœhe.</p>'
+ + '<p><b>Stiure mêrunge ist niht:</b> (1−t)·(1+r)ⁿ = (1+r)ⁿ·(1−t). Manecvalt wendet. Belîbent vier bekantnisse:</p>'
+ + '<ol style="padding-left:1.2em;margin:.3em 0"><li>Stiure-underscheit t₀ − t₁</li>'
+ + '<li>Vremder schaz — zuolegunge des lôngeben oder gâben</li>'
+ + '<li>stiurvrîe behaltunge — niht Vorabpauschale</li>'
+ + '<li>niuwe gelte, die einige wîse berüerent — siechtuom/pflege über Versorgungsbezüge</li></ol>'
+ + '<p>Stap 4 ist der mahtige schade der bAV, stap 2 ein gezimber bezzer. Der wuocher der bAV <b>sinket rehte ie mit des geltes hœhe</b>, wande diu vrîheit al ist unde diu schirmede sinket als 1/K — enist niht innen beste.</p>'
+ + '<p>Bî gesetzeter lûterer nütze wirt al gelt mit rehte wider gerechent: N(B) ist ie unde rehte wehset (dN/dB = 1 − zil des geltes-mâzes − zil des stiure-mâzes > 0), doch bî winkeln bî 4 unde 8 teil hundert BBG-RV, bî zilen des geltes unde stiure-zilen mac daz ende niht wider gerechent werden. 34 rehte gebent minner danne ein zweiunddrizecstel der stiure.</p>',
+ 'det.s.erg': 'Alle drî wîsen in dem sparenne rehte daz selbe wert von dem lûteren koste.',
+ 'det.s.mon': 'Alle wîsen bî selber zît gegolten, nâch hiutigem werte. Wande rehte gilt, diu rihte rehte zesamene rechenent.',
+ 'det.s.diag': 'Wâ von daz sô ist — unde wâ ir stât ûzer disem geratenen wege.',
+ 'msg.linkCopied': 'Daz bant wirt abegeschriben. Swer ez ûfslüzet, der siht rehte dise rechenunge — niht durch maht gât.',
+ 'msg.linkFailed': 'Abeschrîben enmohte niht. Daz bant stêt nû in buoches stat.',
+ 'pwa.offline': '<b>Vrî mac sîn âne bant.</b> Diz werc stêt nû in mahtes behaltunge unde gât âne rüeren. Ze setzenne: bî iPhone „Teilen“ → „Ze êrster tavelen“, bî Android disiu anhanc → „Werc setzen“.',
+ 'pwa.installAsk': '<b>Als werc setzen?</b> Sô stêt mit eigenem zeichen an der êrsten tavelen unde gât âne rüeren. ',
+ 'pwa.declined': 'Wol — daz werc gât ouch sô, unde âne rüeren.',
+ 'pwa.file': '<b>Ir hânt daz buoch selbe ûfgeslozzen</b> (<kbd>file://</kbd>). Al gerechent, al behalten. Zwei wîsen werc-getriuwede sint anders: niht zeichen an der êrsten tavelen unde niht behaltunge âne rüeren — daz enbedorfte hie niht sîn, daz buoch ist ie an disem schatze. Ze vollem bilde der werc-getriuwede, leget den geworf an eine HTTPS-stat unde ûfslüzet dannen.'
+};
diff --git a/app/i18n.goh.js b/app/i18n.goh.js
new file mode 100644
index 0000000..0125fd3
--- /dev/null
+++ b/app/i18n.goh.js
@@ -0,0 +1,624 @@
+/* =====================================================================
+ DIUTISC — Althochdeutsch, VOLLSTÄNDIG (459 Schlüssel).
+ Seit der zweiten Fassung auch die langen Erläuterungstexte übersetzt.
+ Notkers Fachprosa liefert Vorbilder für Bruch- und Verhältnisangaben,
+ aber keine für Paragraphenverweise oder mehrstufige Bedingungssätze;
+ diese folgen daher überwiegend Haupt-Satz-Reihung mit „inti“ (und),
+ „avur“ (aber), „ibu“ (wenn), „wanta“ (weil) statt tiefer Schachtelung.
+ Vertrauensgrad in die Fließtext-Syntax der neuen Passagen etwa 35–40 %
+ (höher als beim Gotischen, da Tatian selbst schon Satzgefüge dieser
+ Länge übersetzt — aus dem Lateinischen); in die wiederverwendeten und
+ neu geprägten Fachwörter weiterhin die dokumentierten 50 %.
+
+ Neu geprägt, nach denselben Regeln wie die Kernliste unten:
+ ewareht Rechtsanspruch (ewa „Gesetz“ + reht, beide belegt)
+ marka Grenze/Bemessungsgrenze (belegt, gotisch-verwandt)
+ frihheit Freibetrag/Freigrenze (belegt: „Freiheit“)
+ gimahho Ehe-/Lebenspartner (belegt: „Gemahl“)
+ willo Zustimmung (belegt: „Wille“, Tatian/Otfrid)
+ gimeiniu sorga gesetzliche Sozialversicherung (gimeini „gemeinsam“
+ + sorga)
+ Mathematische Formeln (N(B) = …, (1−t)(1+r)ⁿ) bleiben als Symbole
+ stehen, wie im Original.
+
+ ZUR SPRACHSTUFE. Normalisiertes Althochdeutsch, im Wesentlichen ostfrän-
+ kisch nach dem Tatian, mit Anleihen bei Notker, wo es um Abstrakta geht
+ — Notker ist der einzige Ahd.-Autor, der überhaupt Fachprosa schreibt.
+ Länge wird nicht markiert (ā, ī), weil die Handschriften es auch nicht
+ tun; Umlaut nur, wo er geschrieben ist.
+
+ ZUR WORTWAHL. Das Ahd. hat für Geld und Abgaben mehr als das Gotische,
+ weil karolingische Urkundensprache und Bibelglossierung sich treffen:
+ gelt Zahlung, Entgelt, Wert (belegt, Tatian)
+ zins Abgabe, Zins (< census) (belegt, Tatian 93,1 zins)
+ lon Lohn (belegt)
+ scaz Geld, Münze (belegt)
+ wuohhar Ertrag, Zins, Wucher (belegt, Notker; Tatian wuocher)
+ ephi/ewa Gesetz, Recht (ewa belegt)
+ alt, altar Alter (belegt)
+ jar, manod Jahr, Monat (belegt)
+ widarmezzon vergleichen (belegt, Tatian: comparare!)
+ teil, teilen Teil, teilen (belegt)
+ rehhanunga Rechnung, Berechnung (belegt, Notker)
+ suht Krankheit (belegt)
+ ganist Heilung, Rettung (belegt)
+ ubarwahst Zunahme (Notker-nah gebildet)
+ houbit Haupt (belegt) → houbitgelt
+ Gebildet, aber nicht belegt — mit ahd. Mitteln, Vertrauensgrad in die
+ Idiomatik etwa 50 %:
+ widarmezzunga Vergleich (zum belegten Verb, Suffix -unga produktiv)
+ longebo Arbeitgeber (nach belegtem goldgebo, wintgebo)
+ lonman Arbeitnehmer
+ houbitgelt Kapital, Hauptsumme (mhd. houbetguot ist belegt)
+ suhtsorga Krankenversicherung
+ altarsorga Altersvorsorge
+ wertubarwahst Inflation (Preiszunahme)
+ ETF bleibt als lateinische Fremdabkürzung stehen. Die Gesetzesfund-
+ stellen bleiben neuhochdeutsch: es gibt sie amtlich nur so.
+ ===================================================================== */
+window.I18N_GOH = {
+ 'f.I:gehalt.label': 'Jargelt al, hiutu',
+ 'f.I:beitrag.label': 'Manodgelt ze bAV, al',
+ 'f.I:netto_ziel.label': 'Manodlih kosta, lutar',
+ 'f.I:agzus.label': 'Zuogift des longebon',
+ 'f.I:agz_fix.label': 'Festiu zuogift darzuo',
+ 'f.I:agz_fix_dyn.label': 'Die festun zuogift wahsan lazan',
+ 'f.I:agz_fix_dyn.o0': 'nah namen, unwantalot',
+ 'f.I:agz_fix_dyn.o1': 'mit demo lone',
+ 'f.I:agzus_sv.label': 'Wisa der zuogift',
+ 'f.I:agzus_sv.o0': 'al gelt',
+ 'f.I:agzus_sv.o1': 'der frie teil eino',
+ 'f.I:agzus_sv.o2': 'nah warheite gerehhanot',
+ 'f.I:dyn.label': 'Daz gelt wahsan lazan',
+ 'f.I:dyn.o1': 'mit demo lone',
+ 'f.I:dyn.o0': 'nah namen, unwantalot',
+ 'f.I:rendite.label': 'Al wuohhar des ETF in jare',
+ 'f.I:alter.label': 'Altar hiutu',
+ 'f.I:alter.unit': 'jar',
+ 'f.I:rentbeg.label': 'Anagenni der gelte',
+ 'f.I:rentbeg.unit': 'jar',
+ 'f.I:kv_ruhe.label': 'Suhtsorga in altare',
+ 'f.I:kv_ruhe.o1': 'nah ewu',
+ 'f.I:kv_ruhe.o2': 'eiganlih',
+ 'f.I:auszform.label': 'Uzgift der bAV',
+ 'f.I:auszform.o1': 'houbitgelt',
+ 'f.I:auszform.o2': 'lipgelt al daz leben',
+ 'f.I:teilkap.label': 'Altersvorsorgedepot: einiu gift ze anagenne',
+ 'f.I:av_auszform.label': 'Altersvorsorgedepot: daz ander',
+ 'f.I:av_auszform.o1': 'uzgift nah rehhanungu',
+ 'f.I:av_auszform.o2': 'lipgelt al daz leben',
+ 'f.I:agz_fix_min.label': 'Minnista eigan gelt zi der festun zuogift',
+ 'f.I:rentfak_av.label': 'Lipgeltes mez des Altersvorsorgedepot',
+ 'f.I:rentfak_av.unit': '€ ze 10.000 €',
+ 'f.I:rentdyn_av.label': 'Wahst des scazlipgeltes in jare',
+ 'f.I:rentfak.label': 'Lipgeltes mez der bAV',
+ 'f.I:rentfak.unit': '€ ze 10.000 €',
+ 'f.I:rentdyn.label': 'Wahst des bAV-lipgeltes in jare',
+ 'f.I:fuenftel.label': 'Die fimftun ewa suohhen',
+ 'f.I:fuenftel.o0': 'nein (bihuotlihho)',
+ 'f.I:fuenftel.o1': 'ja',
+ 'f.I:planende.label': 'Marka der widarmezzungu unz zi altare',
+ 'f.I:planende.unit': 'jar',
+ 'f.I:ausscheid.label': 'Uzgangan fon demo werke',
+ 'f.I:ausscheid.unit': 'jar',
+ 'f.I:tzalter.label': 'Halb werk fon altare',
+ 'f.I:tzalter.unit': 'jar',
+ 'f.I:tzfaktor.label': 'Mez des halben werkes',
+ 'f.I:gsteig.label': 'Wahst des lones in jare',
+ 'f.I:stkl.label': 'Wisa des zinses',
+ 'f.I:stkl.o1': 'suntar',
+ 'f.I:stkl.o3': 'saman (mit halbungu)',
+ 'f.I:partner.label': 'zinsgelt des gimahhon',
+ 'f.I:kist.label': 'Mez des kirihzinses',
+ 'f.I:tarifanp.label': 'Wantalunga der zinsmarko in jare',
+ 'f.I:kinder.label': 'Zala der kindo',
+ 'f.I:kind_jahre.label': 'Jar mit kindgifti',
+ 'f.I:kind_jahre.unit': 'jar',
+ 'f.I:kinderlos.label': 'Ana kind (zuogift zi der sorgu)',
+ 'f.I:kinderlos.o0': 'nein',
+ 'f.I:kinderlos.o1': 'ja',
+ 'f.I:k_bav.label': 'Kosta des bAV-werkes in jare',
+ 'f.I:k_av.label': 'Kosta des Altersvorsorgedepot in jare',
+ 'f.I:k_priv.label': 'Kosta des eiganen ETF-scazhuses in jare',
+ 'f.I:infl.label': 'Wertubarwahst in jare',
+ 'f.I:sonst_zve.label': 'ander zinsgelt in altare',
+ 'f.I:rente_br.label': 'lipgelt nah ewu, al, in jare',
+ 'f.P:bbg_rv.label': 'Marka des geltes der altarsorgu (jarlih)',
+ 'f.P:bbg_kv.label': 'Marka des geltes suhte inti sorgu',
+ 'f.P:bezug.label': 'Bezugsgröße (manodlih)',
+ 'f.P:de_rv.label': 'Lon nah mittemo (RV)',
+ 'f.P:rw.label': 'Wert des lipgeltstuckes nu',
+ 'f.P:rw.unit': '€',
+ 'f.P:rv_an.label': 'Altarsorgu gelt, teil des lonmannes',
+ 'f.P:av_an.label': 'Unwerkes gelt, teil des lonmannes',
+ 'f.P:kv_allg.label': 'Gimeini mez der suhtsorgu',
+ 'f.P:kv_zus.label': 'Zuogift der suhtsorgu nah mittemo',
+ 'f.P:pv_ges.label': 'Al mez der sorgu',
+ 'f.P:pv_an.label': 'Sorga, teil des lonmannes',
+ 'f.P:pv_kl.label': 'Sorga, zuogift dero ana kind',
+ 'f.P:gfb.label': 'Grunttiure fri (enti des ringes 1)',
+ 'f.P:e2.label': 'Enti des ringes 2',
+ 'f.P:e3.label': 'Enti des ringes 3',
+ 'f.P:e4.label': 'Anagenni des ringes 5 (richero zins)',
+ 'f.P:a2.label': 'Mezzunga a₂',
+ 'f.P:b2.label': 'Mezzunga b₂',
+ 'f.P:a3.label': 'Mezzunga a₃',
+ 'f.P:b3.label': 'Mezzunga b₃',
+ 'f.P:c3.label': 'Stati c₃',
+ 'f.P:c4.label': 'Stati c₄',
+ 'f.P:c5.label': 'Stati c₅',
+ 'f.P:soli.label': 'Gimeinsami zuogift',
+ 'f.P:soli_fg.label': 'Friu marka der zuogift',
+ 'f.P:soli_mz.label': 'Milti ring, marko burdin',
+ 'f.P:an_pausch.label': 'Lonmanno abanemunga, stati',
+ 'f.P:sa_pausch.label': 'Suntariger kosto abanemunga, stati',
+ 'f.P:kapst.label': 'Mez des scazzinses',
+ 'f.P:tfs.label': 'Halb frihheit der teilscazzo',
+ 'f.P:sparerpb.label': 'Sparennes abanemunga, stati',
+ 'f.P:basiszins.label': 'Grunt-wuohhar der Vorabpauschale',
+ 'f.P:vp_faktor.label': 'Mezzunga des grunt-wuohhares',
+ 'f.P:st_frei_q.label': 'zinsfri § 3 Nr. 63 (teil BBG-RV)',
+ 'f.P:sv_frei_q.label': 'geltfri (teil BBG-RV)',
+ 'f.P:zul_g1.label': 'Gift, stiega 1 (ze iogilihhemo € eiganes geltes)',
+ 'f.P:zul_s1.label': 'Marka der stiegu 1',
+ 'f.P:zul_g2.label': 'Gift, stiega 2 (ze iogilihhemo € eiganes geltes)',
+ 'f.P:zul_s2.label': 'Marka der stiegu 2',
+ 'f.P:kind_zul.label': 'Gift ze iogilihhemo kinde',
+ 'f.P:av_max.label': 'Meista ingift in jare',
+ 'f.P:av_sa_max.label': 'Meista abanemunga § 10a',
+ 'f.P:ertragsq.label': 'Teil des wuohhares (altar 67)',
+ 'f.P:halb.label': 'zinsskuldig teil des untarscheides',
+
+ /* ---------------- Rama, venstartitula ---------------- */
+ 'app.title': 'Altarsorgu widarmezzunga',
+ 'hdr.title': 'Altarsorgu&#8209;widarmezzunga',
+ 'win.header': 'Altarsorgu widarmezzunga',
+ 'win.result': 'Uzganc',
+ 'win.input': 'Iuweriu wort',
+ 'win.chart': 'Gimalizi',
+ 'win.extra': 'Anderiu wort',
+ 'win.calc': 'Weg der rehhanungu',
+ 'win.share': 'Bihalten inti geban',
+ 'win.min': 'Minnirren',
+ 'win.restore': 'Widar setzen',
+ 'win.n': function(p){ return 'Venstar ' + p.n; },
+ 'ui.share': 'Bant mit minen zalon abaskriban',
+ 'ui.export': 'Also buoh bihalten',
+ 'ui.import': 'Buoh laden',
+ 'ui.reset': 'Al widar setzen',
+ 'ui.pin.set': 'Also rihti gihalten',
+ 'ui.pin.clear': 'Die rihti lazan',
+ 'ui.lang': 'Sprahha',
+ 'ui.lang.aria': 'Sprahha kiosan',
+ 'ui.lang.partial': 'nur zi teile gikeret',
+ 'ui.lang.partialNote': 'Disiu sprahha ist <b>zi teile gikeret</b>: daz antluzzi, diu namon dero stete, diu houbit dero tafalono inti diu zeihhan dero gimalizo sint hiar. Diu langun ewa-gikerida — diu wort untar demo <span class="qm" style="cursor:default">?</span> bi den steten, daz urteili inti der weg der rehhanungu — irskinent in niuwer diutiskun. Diu ewa-giscrib (BetrAVG, EStG, SGB V) sint in allen sprahhon diutisc: nah ambahte ni sint sie andaraweg.',
+ 'sb.up': 'Ufi zi demo uzgange',
+
+ /* ---------------- Diu driu ---------------- */
+ 'opt.bav.name': 'bAV (lones wantalunga)',
+ 'opt.bav.short': 'bAV',
+ 'opt.bav.nom': 'diu werkes altarsorga',
+ 'opt.bav.satz': 'Diu werkes altarsorga',
+ 'opt.bav.gen': 'der bAV',
+ 'opt.av.name': 'Altersvorsorgedepot',
+ 'opt.av.short': 'AV-scazhus',
+ 'opt.av.nom': 'daz Altersvorsorgedepot',
+ 'opt.av.satz': 'Daz Altersvorsorgedepot',
+ 'opt.av.gen': 'des Altersvorsorgedepot',
+ 'opt.priv.name': 'eigan ETF-scazhus',
+ 'opt.priv.short': 'eigan',
+ 'opt.priv.nom': 'daz eigana ETF-scazhus',
+ 'opt.priv.satz': 'Daz eigana ETF-scazhus',
+ 'opt.priv.gen': 'des eiganen ETF-scazhuses',
+
+ /* ---------------- Zeihhan ---------------- */
+ 'metric.monat.label': 'Manodlihiu gift',
+ 'metric.monat.unit': '€/manod',
+ 'metric.ertrag.label': 'Lutar gewin (wert nu)',
+ 'metric.ertrag.unit': '€',
+ 'metric.irr.label': 'Innar wuohhar',
+ 'metric.irr.unit': '% in jare',
+ 'metric.kapital.label': 'Houbitgelt ze lipgeltes anagenne',
+ 'metric.kapital.unit': '€',
+ 'metric.pa': ' in jare',
+ 'metric.pp': ' teil hunt',
+ 'metric.short.monat': 'Manod',
+ 'metric.short.ertrag': 'Gewin',
+ 'metric.short.irr': 'IRR',
+ 'metric.short.kapital': 'Houbitgelt',
+
+ /* ---------------- Stete dero worto ---------------- */
+ 'unit.pct': '%',
+ 'unit.eur': '€',
+ 'unit.eurm': '€/manod',
+ 'ui.hintFor': function(p){ return 'Gikerida zi: ' + p.label; },
+ 'ui.cnt.legal': function(p){ return p.n + ' rehhanungu mihhili'; },
+ 'ui.cnt.fields': function(p){ return p.n + ' stete'; },
+ 'group.bav': 'Zuogift inti uzgifte wisa in sundarigen',
+ 'group.person': 'Zit, uzgangan, halb werk',
+ 'group.steuer': 'Zins, zinses wisa, kind',
+ 'group.markt': 'Kosta inti wertubarwahst',
+ 'group.ruhe': 'Altar',
+ 'group.p_sv': 'Rehhanungu mihhili: gimeini sorga 2026',
+ 'group.p_est': 'Rehhanungu mihhili: zins des geltes 2026 (§ 32a EStG)',
+ 'group.p_kap': 'Rehhanungu mihhili: scaz- inti teilscazzo zins',
+ 'group.p_bav': 'Rehhanungu mihhili: werkes inti gigebaniu eigan sorga',
+
+ /* ---------------- Uzganges tafalon ---------------- */
+ 'card.lead': 'foran',
+ 'card.unchanged': 'unwantalot',
+ 'base.pinned': 'Δ widar demo gihaltanen',
+ 'base.delta': function(p){ return 'Δ ' + p.desc; },
+ 'base.none': 'Ruoret einan rihtari — diu wantalunga kumit hiar also Δ.',
+ 'base.desc.prev': 'daz fora',
+ 'base.desc.pinned': 'daz gihaltana',
+ 'base.desc.change': function(p){ return 'fora der wantalungu des „' + p.label + '“'; },
+ 'verdict.pp': function(p){ return p.v + ' teil hunt'; },
+
+ /* ---------------- Mitigangantaz bant ---------------- */
+ 'sb.cap': function(p){ return p.label + ' · ' + p.unit + (p.kaufkraft ? ', nah hiutigemo werde' : ''); },
+ 'sb.aria': function(p){ return 'Uzganc: ' + p.label; },
+
+ /* ---------------- Gimalizi ---------------- */
+ 'tab.sens': 'Infindida',
+ 'tab.wf': 'Werdes triban',
+ 'tab.kap': 'Houbitgeltes weg',
+ 'tab.zer': 'Manodes teilunga',
+ 'chart.error': function(p){ return 'Gimalizi ni mag irskinan: ' + p.msg; },
+ 'sens.legendY': function(p){ return 'y: ' + p.label + ' (' + p.unit + ')'; },
+ 'wf.up': 'hevit den gewin',
+ 'wf.down': 'nidarit den gewin',
+ 'wf.legend': 'Wert nu des lutaren gewinnes, nah hiutigemo werde',
+ 'wf.barinfo': function(p){ return p.label + ': ' + p.note; },
+ 'wfb.vp.label': 'Abafal der Vorabpauschale',
+ 'wfb.zul.label': 'Gifte inti suntariger kosto abanemunga',
+ 'wfb.arch.label': 'Zinses gizimbari (daz ander)',
+ 'wfb.agz.label': 'Zuogift des longebon',
+ 'wfb.tarif.label': 'Zinses untarscheid inti daz ander',
+ 'wfb.kvpv.label': 'Suht inti sorga ubar Versorgungsbezüge',
+ 'wfb.ep.label': 'Firlust dero lipgeltstucko',
+ 'kap.rentbeg': 'Lipgeltes anagenni',
+ 'kap.swap': 'Houbitgelt → lipgeltes reht',
+ 'kap.legend': 'gizogan: al saman &nbsp;·&nbsp; gislizzan: frilih',
+ 'zer.netto': 'lutar',
+ 'zer.tax': 'zins',
+ 'zer.kv': 'suht/sorga',
+ 'zer.pension': 'lipgelt',
+ 'zer.legend': '<span><i style="background:#808080"></i>zins</span><span><i style="background:#800000"></i>suht/sorga</span><span><i style="background:#800080"></i>firloran lipgelt nah ewu</span><span style="margin-left:auto">gifarawit grunt = daz dar biliban ist</span>',
+
+ /* ---------------- Weg der rehhanungu ---------------- */
+ 'det.h.bav': 'bAV',
+ 'det.h.av': 'AV-scazhus',
+ 'det.h.priv': 'eigan',
+ 'det.h.kennzahl': 'Zeihhan',
+ 'det.h.wert': 'Wert',
+ 'det.erg.netto': 'Al uzer demo lutaren ingigeban (nah namen)',
+ 'det.erg.fremd': 'Fremidi scaz (zuogift odo gifte)',
+ 'det.erg.kapital': 'Houbitgelt ze anagenne der uzgifte',
+ 'det.erg.brutto': 'Al dero allero uzgifto',
+ 'det.erg.steuer': 'dara ana geltes- inti scazzins',
+ 'det.erg.kvpv': 'dara ana suhtsorga inti sorga',
+ 'det.erg.rentenverlust': 'Firlust des lipgeltes nah ewu (gisamanot)',
+ 'det.erg.nettoausz': 'Al dero lutarero uzgifto (nah namen)',
+ 'det.erg.bwausz': 'Wert nu dero lutarero uzgifto',
+ 'det.erg.bwaufw': 'Wert nu der lutaren kostu',
+ 'det.erg.ertrag': 'Wert nu des lutaren gewinnes',
+ 'det.erg.verhaeltnis': 'Mez des gewinnes zi der kostu',
+ 'det.erg.irr': 'Innar wuohhar (nah namen)',
+ 'det.erg.vorsprung': 'Fora widar demo eiganen scazhuse',
+ 'det.mon.brutto': 'Al gift bi manode',
+ 'det.mon.steuer': 'ana geltes- inti scazzins',
+ 'det.mon.kvpv': 'ana suhtsorga inti sorga',
+ 'det.mon.ep': 'ana firlust des lipgeltes nah ewu',
+ 'det.mon.netto': 'LUTAR BI MANODE (nah hiutigemo werde)',
+ 'det.diag.beitrag': 'Al gelt bAV bi manode',
+ 'det.diag.aufwand': 'Lutariu kosta bi manode (eristaz jar)',
+ 'det.diag.grenzsteuer': 'Marko zinses mez in samanungu (eristaz jar)',
+ 'det.diag.ersparnis': 'Al sparennes mez (zins inti gelt), eristaz jar',
+ 'det.diag.svAG': 'warlihaz sparen des longebon',
+ 'det.diag.svAN': 'warlihaz sparen des lonmannes',
+ 'det.diag.ngef': 'Teil dero bAV-gelto ana gift (eristaz jar)',
+ 'det.diag.aussch': 'Nuzzida des ewa-rehtes (4 % BBG-RV)',
+ 'det.diag.agzVar': 'dara ana zuogift: nah hunde (eristaz jar)',
+ 'det.diag.agzFix': 'dara ana zuogift: stati wert (eristaz jar)',
+ 'det.diag.agzFixUeber4': 'stati zuogift ubar demo 4-%-vazze (ni gizalt also burdin)',
+ 'det.diag.vbMonat': 'Versorgungsbezug bi manode ze anagenne',
+ 'det.diag.freibetrag': 'Frihheit Versorgungsbezüge in demo selben jare',
+ 'det.diag.vbQuote': 'Mez des Versorgungsbezug zi der frihheiti',
+ 'det.diag.kapFreiKapital': 'geltfri mahtig houbitgelt (houbitgeltes gift)',
+ 'det.diag.kapFreiRente': 'geltfri mahtig houbitgelt (lipgelt al daz leben)',
+ 'det.diag.memoRest': 'GIHUGIDA: bAV-lipgeltes gifte nah der marku',
+ 'det.diag.memoRestAv': 'GIHUGIDA: scazlipgelt nah der marku',
+ 'det.diag.wiederanl': 'Widarlegennes wuohhar nah zinsun',
+ 'det.diag.kapstEff': 'warlihaz scazzins mit zuogift inti kirihzinse',
+ 'det.diag.bestAnteil': 'Zinsskuldig teil des lipgeltes nah ewu',
+ 'det.anspar.h.jahr': 'Jar',
+ 'det.anspar.h.brutto': 'Al',
+ 'det.anspar.h.beitrag': 'bAV-gelt',
+ 'det.anspar.h.agzVar': 'Zuogift %',
+ 'det.anspar.h.agzFix': 'Zuogift stati',
+ 'det.anspar.h.sv': 'Geltes sparen',
+ 'det.anspar.h.st': 'Zinses sparen',
+ 'det.anspar.h.netto': 'Lutariu kosta',
+ 'det.anspar.h.zul': 'Gifte',
+ 'det.anspar.h.kbav': 'Houbitgelt bAV',
+ 'det.anspar.h.kav': 'Houbitgelt AV',
+ 'det.anspar.h.kpriv': 'Houbitgelt eigan',
+ 'det.row.year': function(p){ return p.jahr + ' (altar ' + p.alter + ')'; },
+ 'det.ausz.h.jahr': 'Jar',
+ 'det.ausz.h.bavBr': 'bAV al',
+ 'det.ausz.h.kvpv': 'suht/sorga',
+ 'det.ausz.h.steuer': 'Zins',
+ 'det.ausz.h.mind': 'Lipgeltes minnirunga',
+ 'det.ausz.h.bavNet': 'bAV lutar',
+ 'det.ausz.h.avBr': 'AV al',
+ 'det.ausz.h.avNet': 'AV lutar',
+ 'det.ausz.h.privBr': 'eigan al',
+ 'det.ausz.h.privNet': 'eigan lutar',
+ 'det.ann.h.annahme': 'Wanunga',
+ 'det.ann.h.vertrauen': 'Gitruwida',
+ 'det.ann.h.anmerkung': 'Merkunga',
+ 'det.ann.r1.a': 'Rehhanungu mihhili 2026, § 32a-zins 2026',
+ 'det.ann.r1.c': 'SVBezGrV 2026, Steuerfortentwicklungsgesetz',
+ 'det.ann.r2.a': 'Skuld suhte inti sorgu ubar Versorgungsbezüge',
+ 'det.ann.r2.c': '§§ 229, 250 SGB V',
+ 'det.ann.r3.a': 'Frihheit § 226 Abs. 2 S. 2 SGB V (suht)',
+ 'det.ann.r3.c': 'ana strit',
+ 'det.ann.r4.a': 'Marka in stat der frihheiti in der sorgu',
+ 'det.ann.r4.c': 'diu meista missituo in ratgebo scriftin',
+ 'det.ann.r5.a': 'Geltfrihheit der AV-scazhuses uzgifte',
+ 'det.ann.r5.c': 'ni sint Versorgungsbezüge',
+ 'det.ann.r6.a': 'Halb untarscheid zi ungigebanen teilon',
+ 'det.ann.r6.c': '§ 22 Nr. 5 S. 2 Buchst. b i.V.m. § 20 Abs. 1 Nr. 6 S. 2 EStG',
+ 'det.ann.r7.a': 'Zuogift unz zi demo warlihen sparenne des longebon',
+ 'det.ann.r7.c': 'diu andar wanunga liset diu 15 % also blozza stati',
+ 'det.ann.r8.a': 'Suntariger kosto meista 2.340 €',
+ 'det.ann.r8.c': 'WANUNGA DES BILIDES. Urteilit, ubi ein kind den wert des AV-scazhuses hevit odo nidarit',
+ 'det.ann.r9.a': 'KVdR-skuldigiu sorga in altare giwanit',
+ 'det.ann.r9.c': 'willigo gisorgote ni gisuohte',
+ 'det.t.prinzip': 'Daz reht der widarmezzungu',
+ 'det.t.erg': 'Uzganc in sundarigen',
+ 'det.t.mon': 'Manodlihiu gift, giteilit',
+ 'det.t.diag': 'Irkennida',
+ 'det.t.anspar': 'Samanungu zit, jar bi jare',
+ 'det.t.ausz': 'Uzgifte zit, jar bi jare',
+ 'det.t.ann': 'Fastnissi dero wanungo',
+
+ /* ---------------- Bihalten inti geban ---------------- */
+ 'msg.loaded': 'Giladan.',
+ 'msg.loadError': function(p){ return 'Daz buoh ni mohta gilesan werdan: ' + p.msg; },
+ 'msg.reset': 'Widar gisetzit zi demo grunte.',
+
+ /* ---------------- PWA ---------------- */
+ 'pwa.installBtn': 'Setzen',
+ 'pwa.installed': '<b>Gisetzit.</b> Nu findet ir daz werk bi den anderen.',
+
+ /* ---------------- Diu langun ewa-gikerida — daz ander stiega ---------------- */
+ 'f.I:gehalt.hint': 'Ana einmal-gifte. Diz sezzit iuwera zinsmarka inti ob ir ubar der marku des geltes sit.',
+ 'f.I:beitrag.hint': 'Al gelt nah ewu § 1a BetrAVG. Daz ewareht ist unz zi 4 teil hunt der marku des geltes RV; ubar demo darf iz des longebon willon.',
+ 'f.I:netto_ziel.hint': 'Daz wert, des daz iuwer scaz minnirot in demo eristen jare — diu warlihho firlazana nuzzida. Daz selba wert werdent in allen drin wisun gilegit; daz ist zi rehteru widarmezzungu. Nah demo mag man iz io widar rehhanon.',
+ 'f.I:agzus.hint': 'Ewarehtiu minnista sint 15 teil hunt (§ 1a Abs. 1a BetrAVG); manage longeba geband mera. Zi widarmezzonne wider daz eigana scazhus, dar zuogift inti eigan scaz gilih sint, mag man mit der rehhanungu mez irkennen.',
+ 'f.I:agz_fix.hint': 'Fastiu zuogift, gisezzit nah zinstriuwu odo werkgiheiz — so bi der Deutsche Bahn inti manegen anderen triuwon, dar diu zuogift 15 teil hunt § 1a Abs. 1a BetrAVG nah kumit. Daz ist des longebon gelt nah § 3 Nr. 63 EStG inti fullit erist daz 8-teil-hunt- inti 4-teil-hunt-vaz (§ 1 Abs. 1 S. 1 Nr. 9 SvEV): iuwer eigan wantalunga wirdit denne minnira inti tiurira.',
+ 'f.I:agz_fix_dyn.hint': 'Gisezzitiu wert bilibent nah namen in der triuwu inti wahsent eino mit niuwen triuwon — daz erista bilibit nah namen ana wantalunga. In 27 jaren inti 2 teil hunt wertubarwahstes bilibit 1,02⁻²⁷ ≈ 0,59; sose disiu wenegi ungiwis ahtot, kiose „mit demo lone“.',
+ 'f.I:agzus_sv.hint': '„Nah warheite girehhanot“ ist ewa-wort: § 1a Abs. 1a BetrAVG scal so vil zuogeban, so vil warlihho der longebo an geltes gift sparet. Ist iuwer lon ubar bêdên markon, ni sparet er niowiht inti ni scal er niowiht. Nah dhiu ist daz eriste rehhanunga in scazze unz 21 teil hunt hovisc. Gitruwida in disera rehhanungu ist 75 teil hunt.',
+ 'f.I:dyn.hint': 'Ibu daz gelt mit demo lone wahsit, bilibit diu nuzzida des 8-teil-hunt-vazzes jarlih gilih. Ibu iz nah namen unwantalot stat, sinkit sin wert mit demo wertubarwahste — inti diu lutar nuzzida, dero diu andaru zwiu widarmezzon scal, sinkit gilihho.',
+ 'f.I:rendite.hint': 'Fora wuohhare, fora zinse. In allen drin wisun daz selba ETF — also mag man einic diu gizimbari widarmezzon, nals zinsfriu urteil.',
+ 'f.I:alter.hint': 'Anagenni des sparennes. Jar 0 = 2026.',
+ 'f.I:rentbeg.hint': 'Anagenni der gelte in allen drin wisun. Daz Altersvorsorgedepot mag erist fon 65 jaren gigeban werdan (niuwa gisezzit 2026).',
+ 'f.I:kv_ruhe.hint': 'Der mahtigo scalc. In der ewarehten suhtsorgu heizent werkes gelt Versorgungsbezüge inti tragant al zinsmez (§§ 229, 250 SGB V); ir altarsorga ni tregit iz. Ein gisezzida hiar wentit den weg.',
+ 'f.I:auszform.hint': 'Houbitgelt: der al ze einemo male giftiu zins-al werdent uber 120 manodon giteilit (§ 229 Abs. 1 S. 3 SGB V). Daz gelt al daz leben spreitit disa gift ubar daz gansa leben inti giscirmit so mera scaz undar dero selbun frihheiti. Diz bilidi mag al odo niowiht kiosan; halb houbitgelt der bAV ist ni gibiladot hiar.',
+ 'f.I:teilkap.hint': 'Unz zi 30 teil hunt des gisamanoten scazzes mag zi anagenne der gelte also einiu gift ginoman werdan — in bêdên wisun. Der kosto hevit zwo fresun: al der wahst in demo einen jare ginoman wirdit, inti dar nah wahsit wuohhar eino nah der zinsmarku. Daz ubarista wert des jares (der „sleeve“) ana zinsgelt gifte wirdit; daz ist bilides sito, ni ewa-reht.',
+ 'f.I:av_auszform.hint': 'Daz, so mit demo scazze nah der einen gifti gitan wirdit — suntar fon dero bAV-gisezzidu. Rihtida der gelte: der scaz gisamanot wirdit inti mit wuohhare gigeban; der ungigebano teil mit halbemo untarscheide gizinsot wirdit. Gelt al daz leben: houbitgelt zi demo longebon gat, avur der ungigebano teil eino mit demo teile des akkares gizinsot wirdit (§ 22 Nr. 5 S. 2 Buchst. a EStG, 17 teil hunt fon 67 jaren, hiar 26 teil hunt). Diu gigebano teil in bêdên wisun al widargoltan wirdit, daz ni wentit.',
+ 'f.I:agz_fix_min.hint': 'Gilihhiu bilidi bindent gisezzitan wert zi minnistemo eiganemo gelte. 0 heizit ana bant — so gat diu zuogift iogilihes jares werkes, oh mit niowihtes gelte. Zi ahtonne: ein warlih ana-bant-zuogift wari ni untarscheit demo wantalunga-banti inti wari wider bAV gilegit, ouh ibu si ana wantalunga giengi. Ana-scrib eino daz, so warlihho zi teile hengit.',
+ 'f.I:rentfak_av.hint': 'Ein mez zi demo scazze, der gelt wirdit. Gisezzit so bi der bAV; scazes triuwa mag ana suhtsorgu wesan inti so bezira wesan. Bi 0 ist niowiht gelt.',
+ 'f.I:rentdyn_av.hint': 'Ubarwerkes teil odo mez des wahstes in gelte-ziton der scazes triuwu.',
+ 'f.I:rentfak.hint': 'Ein mez zi der gifte-wisu „gelt“. 26 € manodlih gelt bi 10.000 € ist so 3,1 teil hunt ginoman. Stat in demo buoche der werkgitriuwido.',
+ 'f.I:rentdyn.hint': 'Ubarwerkes teil odo mez des wahstes in gelte-ziton.',
+ 'f.I:fuenftel.hint': '§ 34 EStG bi giordinotemo houbitgeltes gifte fon § 3 Nr. 63-triuwon nah BFH X R 23/15 giwilligo giprucchit wirdit. Giwis: nein.',
+ 'f.I:planende.hint': 'Rihtida der gelte gat unz hiar. Gelt al daz leben nah der selbun marku widarmezzot wirdit; daz, so nah dhiu gat, stat also gihugida untar „Irkennidu“. Ther altêr wirdit, dar gwinnit.',
+ 'f.I:ausscheid.hint': 'Fon hiar ana lon inti ana gelt. Der scaz wuohhorot unz zi anagenne der gelte.',
+ 'f.I:tzalter.hint': 'Iogilih wert wirdit fon anagenne der gelte gizalt: nals halbaz werc. Gisezzit ist 67.',
+ 'f.I:tzfaktor.hint': 'Teil des fullen werkes lones. 60 teil hunt = 60-teil-hunt stat.',
+ 'f.I:gsteig.hint': 'Inti tregit fora marka des geltes, Bezugsgröße, mittilemo lone inti zinses werde.',
+ 'f.I:stkl.hint': 'Mahtig ist DIU ZINSWISA, ni der lones zinsflocc: der flocc rihtit iogilihes jares abanemunga, jariu buoh rehhanont avur mit halbungu nah § 32a Abs. 5 EStG. Bi „saman“ nôtthurftlihho ana-scrib den zinswert des gimahhon.',
+ 'f.I:partner.hint': 'Ein mez zi samentemo zinse. Girehhanot wirdit 2·ESt((zvE + zvE_gimahho)/2).',
+ 'f.I:kist.hint': '8 teil hunt in Bayern inti Baden-Württemberg, andarswar 9, 0 den ûzgetretenen fon dero kirihhun. Inti daz zinsgelt heizit: 0,25/(1+0,25k)·(1+0,055+k).',
+ 'f.I:tarifanp.hint': 'Al gelt wirdit mit demo werkes-gikewi λ = (1+x)^t giwahsan gimezzan: ESt = s·λ·T(zvE/s/λ). Daz ist so, so alliu ringmarka gilihho wahsent. 0 teil hunt zeigot al kaltan wahst.',
+ 'f.I:kinder.hint': 'Kindes gift in Altersvorsorgedepot: 1 € zi iogilihemo € eiganes geltes, unz 300 € bi kinde.',
+ 'f.I:kind_jahre.hint': 'Disiu kindes gift hevit an dero mahti kindes lones (§ 85 EStG), so ni gat al durah daz sparen.',
+ 'f.I:kinderlos.hint': '0,6 teil hunt zuogift zi der sorgu-gifte, den ana kind (§ 55 Abs. 3 SGB XI).',
+ 'f.I:k_bav.hint': 'Suhtsorgu mez inti TER. Warlihiu nuzzida stant in demo buoche der werkgitriuwido — dar sich, ni urteili ana daz.',
+ 'f.I:k_av.hint': 'Bi giordinotemo scazze sint warlihiu nuzzida nah ewu gisezzit unz zi 1,0 teil hunt bi jare.',
+ 'f.I:k_priv.hint': 'Blozzi TER breitero werlt-ETF.',
+ 'f.I:infl.hint': 'Sinkit al werd zi „nah hiutigemo werde“. Luzzil wentit diu rihti, avur al hoehi.',
+ 'f.I:sonst_zve.hint': 'Erist der zinsskuldigo teil des zinses nah ewu, ana daz hiar gilegita scaz. Diz gisezzit marka des zinsmezes in ziton der gelte — inti so zinses untarscheit t₀ − t₁.',
+ 'f.I:rente_br.hint': 'Ein mez in der suhtsorgu: gelt nah ewu inti Versorgungsbezüge teilent eina marka des geltes (§ 223 Abs. 3 SGB V).',
+ 'f.P:bbg_rv.hint': 'SVBezGrV 2026 (BGBl. 2025 I Nr. 116), gilih in allemo rihhe.',
+ 'f.P:bbg_kv.hint': 'SVBezGrV 2026; 5.812,50 € bi manode.',
+ 'f.P:bezug.hint': 'SVBezGrV 2026, 47.460 € bi jare. Ein zehanto teil ist diu frihheit Versorgungsbezüge in der suhtsorgu (§ 226 Abs. 2 S. 2 SGB V).',
+ 'f.P:de_rv.hint': 'Zuoscrib 1 zi SGB VI, wert 2026 — zala des geltstuckes.',
+ 'f.P:rw.hint': 'Rentenwertbestimmungsverordnung 2026, fon 1.7.2026: 42,52 € (+4,24 teil hunt).',
+ 'f.P:rv_an.hint': '18,6 teil hunt, halb inti halb.',
+ 'f.P:av_an.hint': '2,6 teil hunt, halb inti halb.',
+ 'f.P:kv_allg.hint': '§ 241 SGB V.',
+ 'f.P:kv_zus.hint': 'Kunt des BMG; iogilih sorga andarsulih — ana-scrib iuwera eigana zuogift.',
+ 'f.P:pv_ges.hint': '§ 55 SGB XI. Kindes minnirunga fon andaremo kinde ni ist gibiladot.',
+ 'f.P:pv_an.hint': 'In Sachsen andarsulih (2,3 teil hunt).',
+ 'f.P:pv_kl.hint': '§ 55 Abs. 3 SGB XI, den ana kind.',
+ 'f.P:gfb.hint': '§ 32a Abs. 1 EStG nah demo Steuerfortentwicklungsgesetz.',
+ 'f.P:e2.hint': 'Marka des zinsmezes wahsit fon 14 zi 23,97 teil hunt.',
+ 'f.P:e3.hint': 'Marka des zinsmezes wahsit fon 23,97 zi 42 teil hunt.',
+ 'f.P:e4.hint': 'Fon 277.826 € gilih 45 teil hunt.',
+ 'f.P:a2.hint': 'ESt = (a₂·y + b₂)·y, y = (zvE − grunttiuri fri)/10.000.',
+ 'f.P:a3.hint': 'ESt = (a₃·z + b₃)·z + c₃, z = (zvE − 17.799)/10.000.',
+ 'f.P:c4.hint': 'ESt = 0,42·zvE − c₄.',
+ 'f.P:c5.hint': 'ESt = 0,45·zvE − c₅.',
+ 'f.P:soli.hint': 'SolzG 1995.',
+ 'f.P:soli_fg.hint': '2026, grunttiuri gelt, nah demo rehten ESt; bi samentemo zwifalt. Inti ein milti marka.',
+ 'f.P:soli_mz.hint': '§ 3 Abs. 2a SolzG.',
+ 'f.P:an_pausch.hint': '§ 9a S. 1 Nr. 1a EStG.',
+ 'f.P:sa_pausch.hint': '§ 10c EStG.',
+ 'f.P:kapst.hint': '§ 32d Abs. 1 EStG.',
+ 'f.P:tfs.hint': '§ 20 Abs. 1 Nr. 3 mit § 20 InvStG, teil aktion ubar 50 teil hunt.',
+ 'f.P:sparerpb.hint': '§ 20 Abs. 9 EStG; bi samentemo zwifalt. Firzihit den meistan teil der Vorabpauschale — sih daz irteilen in der werde weg.',
+ 'f.P:basiszins.hint': 'BMF-scrift fon 13.01.2026, § 18 Abs. 4 InvStG (2025: 2,53 teil hunt). Gisezzit zi 0: ni waz Vorabpauschale.',
+ 'f.P:vp_faktor.hint': '§ 18 Abs. 1 S. 1 InvStG.',
+ 'f.P:st_frei_q.hint': '8 teil hunt BBG-RV = 8.112 € in 2026.',
+ 'f.P:sv_frei_q.hint': '§ 1 Abs. 1 S. 1 Nr. 9 SvEV; 4 teil hunt = 4.056 € in 2026. Samo diu marka des ewarehtes nah § 1a BetrAVG.',
+ 'f.P:zul_g1.hint': 'Altersvorsorgereformgesetz, giltic fon Meio 2026, ginuzzit fon 1.1.2027.',
+ 'f.P:zul_s1.hint': 'Unz 360 € eiganes geltes: 50 skazza bi €.',
+ 'f.P:zul_g2.hint': 'Fon 361 unz 1.800 €: 25 skazza bi €.',
+ 'f.P:zul_s2.hint': 'Meistiu gift des eiganen geltes; gimachot meist grunttiuri gift 540 €.',
+ 'f.P:kind_zul.hint': '1 € zi iogilihemo € eiganes geltes, unz 300 € bi kinde.',
+ 'f.P:av_max.hint': 'BMF-fraga bi niuwera gisezzidu dero sinero sorgu, 05.05.2026. Daz ubarista gat in andaremo wege, iz wirdit gizalt so eigan scaz.',
+ 'f.P:av_sa_max.hint': 'GISEZZIDA DES BILIDES, gitruwida 70 teil hunt. Eigan gelt unz 1.800 € inti gifte. Diz mez eino urteilit, ibu ein kint den wert des AV-scazzes hevit odo nidarit.',
+ 'f.P:ertragsq.hint': '§ 22 Nr. 1 S. 3 Buchst. a Doppelbuchst. bb EStG, ze ungigebanen teilon des geltes.',
+ 'f.P:halb.hint': '§ 20 Abs. 1 Nr. 6 S. 2 EStG gilihho (triuwa ubar 12 jar, gift nah 62): halb untarscheit. Gitruwida 80 teil hunt.',
+
+ /* ---------------- Al wort, fuoz, zeihhan ---------------- */
+ 'app.meta': 'Werkes altarsorga, Altersvorsorgedepot inti eigan ETF-scazhus widarmezzot nah demo selben lutaren gewinne. Rehtes stant 2026.',
+ 'hdr.sub': 'Werkes altarsorga, Altersvorsorgedepot inti eigan ETF-scazhus &mdash; nah <b>demo selben lutaren gewinne</b> inti demo selben ETF. Rehtes stant 2026.',
+ 'input.sub': 'Diz rehhanunga wirdit sunilingo niuwa bi iogilihero wantalungu. Mit <span class="qm" style="cursor:default">?</span> irkennit iogilih stat sih selbon.',
+ 'extra.sub': 'Al daz hiar hevit guota fora-gisezzida. Ni ruorit iz, iba iu daz gizami.',
+ 'calc.sub': 'Allen, die disemo wege folgen wellent.',
+ 'share.sub': 'Iuweriu wort sint eino in disemo werke (<kbd>localStorage</kbd>). Niowiht wirdit gisant, ni ist iemer noh gisehan.',
+ 'footer.1': '<b>Ni ist ewa- odo scazes rat.</b> Daz bilidi ist ni triuwa. Rehtes stant 2026 zi der niuwera sinera sorgu ist in manegen steten noh ni giendot; disiu gisezzida mit minnistero gitruwidu stant untar „Weg der rehhanungu → Fastnissi dero wanungo“ inti mugun dar gikeret werdan.',
+ 'footer.2': 'Der rehhanungu kerno ist eino fona demo Excel-bilide <span class="pill">bAV-DYNO_vs_Altersvorsorgedepot_vs_ETF.xlsx</span> abageleitit inti wider dri fresa nah des sumeres rihti gikoron (meisto gilih untarscheit 1,3·10<sup>&minus;14</sup>).',
+ 'metric.monat.desc': 'Gilihiu manodlihiu gift al gelte-zit mit demo selben werde, nah hiutigemo werde. Ein mez, daz man widarmezzon mag mit iuweremo lutaren scazze nu.',
+ 'metric.ertrag.desc': 'Daz, so disiu wisa nah hiutigemo werde ubar iuwer eigan werc tuot: der wert nu allero lutarero gifto ana den wert nu der lutaren nuzzida.',
+ 'metric.irr.desc': 'Wuohhar an demo warlihho gilegiten lutaren scazze, nah namen. Widarmezzot mit demo gisezziten allen wuohhare des ETF — der untarscheit ist der, daz gift inti gelt saman koston odo geband.',
+ 'metric.kapital.desc': 'Fora zinse inti fora gelte, nah namen. Zi willon NI ist diz mez: bAV mag hiar mera fora sin, avur firliuset in der gifte.',
+ 'ui.couple': '<span>⇅</span> Zwei sehant ana daz selba mez. Wentit ein, daz ander folget.',
+ 'ui.legalNote': 'Ewa-mihhili mit buoches stete. Wentit ein, ibu ewa gikeret ist odo iuwer sorga andarsulih ist.',
+ 'n.beitrag.ueber8': function(p, f){
+ return 'Ubar 8 teil hunt der marku des geltes RV (' + f.eur(p.v8) + ' bi jare). Diser teil '
+ + 'ist ubar demo nals zinsskuldig nals geltskuldig — gat in diu suhtsorgu inti dar wirdit '
+ + 'niowiht ginoman ana suhtsorgu eino.'; },
+ 'n.beitrag.ueber4': function(p, f){
+ return 'Ubar 4 teil hunt der marku des geltes RV (' + f.eur(p.v4) + ' bi jare). Unz hiar '
+ + 'hevit ir daz ewareht nah § 1a BetrAVG, ubar demo darf iz des longebon willon.'; },
+ 'n.agzus.gedeckelt': function(p, f){
+ return 'Gimarkot bi ' + f.pct(p.quote, 1) + '. Der longebo sparet warlihho ' + f.eur2(p.ersparnis)
+ + ' bi jare — hohira werd wentent hiar niowiht, unz diu wisa „nah warheite girehhanot“ stat.'; },
+ 'n.agz_fix.fliesstNicht': function(p, f){
+ return 'Ni gat: iuwer manodlih gelt ' + f.eur2(p.beitrag) + ' ist undar dero minnistun marku '
+ + f.eur2(p.schwelle) + ' (sih „In anderen worten“).'; },
+ 'n.agz_fix.ueber4': function(p, f){
+ return 'Diu gisezzita zuogift al ubar daz 4-teil-hunt-vaz (' + f.eur(p.topf) + ' bi jare) mit '
+ + f.eur(p.ueber) + '. Diser teil wari iu longebon lon — daz bilidi ni rehhanot disa mera '
+ + 'burdin, so urteilit iz zi guot fora bAV.'; },
+ 'n.agz_fix.verdraengung': function(p, f){
+ return 'Fullit erist daz 4-teil-hunt-vaz: fon iuweremo eiganen gelte bilibit ' + f.eur(p.rest)
+ + ' geltfri. Iuwer lutar nuzzida wahsit denne — der zuogift ist doh gigebaner scaz, eino '
+ + 'wentit er iuwera eigana marka.'; },
+ 'n.agz_fix.ueber8': 'Saman mit demo eiganen gelte ubar 8 teil hunt BBG-RV — daz ubarista ist ubar demo nals zinsskuldig nals geltskuldig.',
+ 'n.agz_fix_min.knapp': function(p, f){
+ return 'Ir sit eino ' + f.eur2(p.d) + ' ubar der marku. Undar dero firliuset diu gisezzita '
+ + 'zuogift al: wuohhar des lezisten geltes € ist hiar ungiwis, bant al ↔ lutar dar unstati.'; },
+ 'n.agz_fix_min.verfehlt': function(p, f){
+ return 'Marka ni girahhot — ' + f.eur2(p.fehlt) + ' mera bi manode brahtin ' + f.eur2(p.zuschuss)
+ + ' zuogift. Daz ist io der bezisto € in allemo bilide.'; },
+ 'n.teilkap.kosten': function(p, f){
+ return 'Kosto ' + (p.gewinn ? 'niowiht, ávur: ' + p.dtxt : p.dtxt + ' ' + p.unit)
+ + ' wider daz mez der zinsu gilihheiti. Fresa: der eino gifto in einemo jare al zinsskuldig '
+ + 'ist (marko burdin dar ' + f.pct(p.grenz, 1) + ') inti dar nah wuohhorot eino nah zinsmarku, '
+ + 'ni nah des bildes akkare.'; },
+ 'n.av_auszform.horizont': function(p, f){
+ return 'Ubar disa widarmezzunga marka gilt daz gelt noh ' + f.eur(p.rest) + ', so hiar NI '
+ + 'girehhanot werdent. Gisezzitiu marka minnirot iogilih gelt al daz leben — ther altêr '
+ + 'wirdit, dar gwinnit.'; },
+ 'rank.swap': function(p, f){
+ return '<b>Diu zeihhan sih ni gilihhent.</b> Nah manodlihero gifte ist ' + p.a + ' fora wider '
+ + p.b + ', nah hiutigemo werde des lutaren gewinnes ist iz andarsulih. Fresa: der wert nu '
+ + 'sinkit mit demo wertubarwahste (' + f.pct(p.infl, 2) + '), diu manodlih gift gilt mit '
+ + 'demo widarlegonten wuohhare nah gelte (' + f.pct(p.wiederanl, 2) + '). So verro disiu zwei '
+ + 'sih skeidant, so bezira ist gigebanaz houbitgelt. Welih zeihhan gilt, hevit an demo, ob ir '
+ + 'legan wellet odo firzeran — bi „firzeran“ sezzit den wert in „Nuzzida sines ETF-scazzes“, '
+ + 'so daz der widarlegonto wuohhar zi niowihte gat.'; },
+ 'warn.unreachable': 'Diu lutar nuzzida ni mag girahhot werdan — ubar iuweremo lone. Gisezzit ist der hohisto mahtigo wert.',
+ 'warn.inactive': 'In demo eristen jare nah iuweren worten sit ir ni in demo werke — ni wantalunga des lones, so ni lutar nuzzida, dero al gelt widar girehhanot werdan mahti. Sih „Uzgangan fon demo werke“ inti „Altar hiutu“.',
+ 'verdict.lead': function(p){
+ return '<b>' + p.satz + '</b> ist fora mit ' + p.wert + ' — ' + p.d2 + ' mera denne ' + p.nom2
+ + (p.nom3 ? ' inti ' + p.d3 + ' mera denne ' + p.nom3 : '') + '.'; },
+ 'verdict.top': function(p, f){
+ return ' Der meisto einic stat in disemo mezze ' + p.gen + ' wider daz eigana scazhus ist „'
+ + p.label + '“ — inti ' + (p.pro ? 'zi guote' : 'zi scaden') + ' ' + p.gen + ', mit '
+ + f.eur(p.wert) + ' werde nu. Al giteilida stat untar „Wertes irkennida“.'; },
+ 'verdict.band': function(p, f){
+ return '<span class="band">Wio festi ist daz? Bi allemo wuohhare ' + f.pct(p.lo, 1) + ' unz zi '
+ + f.pct(p.mid, 1) + ' wari daz ' + p.vlo + ', bi ' + f.pct(p.hi, 1) + ' wari ' + p.vhi
+ + ' — daz irkennen '
+ + (p.stabil ? 'in disemo mezze gilih bilibit.'
+ : '<b>in disemo mezze andarsulih wirdit</b>, daz irkennen ni gitregit hiar.')
+ + '</span>'; },
+ 'demo.text': '<b>Diz sint noh bilides werd</b> — 40 jar alt, 75.000 € jarlih al lon, 300 € lones wantalunga bi manode, ewareht suht. Ana-scrib untar „In iuweren worten“ diu iuweriu; disiu gihugida denne selbo gat.',
+ 'sens.readout': 'Girinit: iuwer wert nu. Ringi: mezzunga stat mit demo sinemo scazze. Ubar disemo wege varit odo ruorit zi werden.',
+ 'sens.note': function(p){
+ return 'Der lezisto girorto rihtari wirdit al durah sin mez girehhanot — ' + p.n
+ + ' fulliu bilides umbiloufi. Nu: „' + p.label + '“. Girorit andaran rihtari, inti der weg wirdit mit.'; },
+ 'sens.noteNetto': function(p, f){
+ return ' Sih: der rihtari inti diu lutar nuzzida wirdit (hiar ' + f.eur2(p.lo) + ' unz '
+ + f.eur2(p.hi) + ' bi manode) inti so daz wert, so in allen drin wisun gilegit wirdit. So '
+ + 'mugun diu dri ringi bi iogilihemo x rehto gilih werdan, avur diu hohi mit anderen x ni. '
+ + 'Diu wraikwiti sint bi marku des geltes (' + f.eur(p.bbgkv) + ' zi KV/PV, ' + f.eur(p.bbgrv)
+ + ' zi RV/AV) inti bi zinsmarkon.'; },
+ 'wf.check': function(p, f){
+ return 'Fresa: ' + f.eur(p.start) + ' + ' + f.eur(p.summe) + ' = ' + f.eur(p.start + p.summe)
+ + ' (scolti ' + f.eur(p.ende) + ' wesan, untarscheit ' + f.nf2(p.start + p.summe - p.ende) + ' €).'; },
+ 'wf.note': 'Al giteilit fon demo ende, doh rehto girehhanot — avur ist <b>rehtes giwerc</b>: diu maht ni mugun zitrennit werdan, iogilih stab mezzit teil <i>gimazlih</i> demo dar ubar. Ruorit den stab zi irkennidu.',
+ 'wfb.vp.note': 'Weder bAV noh Altersvorsorgedepot Vorabpauschale (§ 18 InvStG) kunnun. Gimezzan so eigan scaz ana Vorabpauschale inti mit iru. Der stab mag sinkan: diu Vorabpauschale gat filu in des sparennes teil, avur hevit al kosto grunt — inti so ist zi eiganemo scazze teil bezira.',
+ 'wfb.zul.note': 'Fremidi scaz nah niuweremo gelte-bilide inti abanemunga nah § 10a EStG. Gimezzan mit widarlazan bêdên wegon.',
+ 'wfb.arch.note': 'Zinses untarscheit t₀ − t₁ inti al ander. Daz bilibanta rihtit, daz diu keti rehto gat.',
+ 'wfb.agz.note': 'Fremidi scaz — daz einiga gizimbari bezira der bAV, daz ni fon ewareht kumit. Gimezzan mit widarlazan disa zuogift.',
+ 'wfb.tarif.note': 'Marka des zinsmezes bi gelte ana bi nome, inti al ander. Daz bilibanta rihtit, daz diu keti rehto gat. Zinses mera ist niowiht: (1−t)(1+r)ⁿ = (1+r)ⁿ(1−t), managfaltunga wentit ni daz wert.',
+ 'wfb.kvpv.note': '§§ 229, 250 SGB V: al zinsmez tregit der gelt-niozant. Gimezzan so untarscheit wider gisezzida „sin suht in altare“.',
+ 'wfb.ep.note': 'Lones wantalunga minnirot des longebon lon inti so gelt nah ewu. Lutar girehhanot.',
+ 'kap.readout': function(p, f){
+ return 'Zi anagenne der gelte gibunten: bAV ' + f.eur(p.bavGeb) + ' fon ' + f.eur(p.bav)
+ + ' · AV-scazhus ' + f.eur(p.avGeb) + ' fon ' + f.eur(p.av)
+ + ' · eigan scaz ' + f.eur(0) + ' fon ' + f.eur(p.priv)
+ + '. Diu gilihiu manodlih gift ginoman wirdit, so iogilih wisa zi niowihte endot.'; },
+ 'kap.note': function(p, f){
+ return 'Der scaz stat in demo bilide, in ziton der gelte mit lutaro widarlegoten gifton wahsit'
+ + ' (' + f.pct(p.wiederanl, 2) + ' nah gelte) inti ana disa gilihun manodlihun gift, warlihho '
+ + 'ginoman. So iogilih wisa rehto zi niowihte gat. Wanta ginoman ist eino fon widarlegonne, '
+ + 'inti daz bildes houbitgelt in demo bilide bilibit, dar mit des bildes akkare fora zinse '
+ + 'wahsit, doh die ringi ni gilihho gant. — Diu gimarkota reht ist der frie ginuzzit teil: '
+ + 'bAV unz zi der gelte anagenne al gibunten ist (§ 1b BetrAVG kann unfirlorana maht, ni '
+ + 'frihheit), zi Altersvorsorgedepot ginoman fora 65 jaren ist skado inti frie eino daz '
+ + 'ubarista ubar des jares meistemo werde, eigan scaz ist io frie. Daz ist der einigo weg, '
+ + 'dar houbitgeltes gift guot insihit. '
+ + (p.verrentet ? 'Wanta ir daz gelt niuzet, dar gat ouh daz houbitgelt zi demo longebon — der '
+ + 'ring sinkit dara nah, ouh ibu niowiht firloran ist. ' : '')
+ + 'Inti abur giwis: die ringi zeigont daz eigan fon DISEMO EINEN wege, ni al iuwer eigan.'; },
+ 'zer.readout': 'Al so gilihiu manodlih gift nah hiutigemo werde. Wanta rehto gilt, giteilida rehto samant girehhanont.',
+ 'zer.note': function(p, f){
+ return 'Diu zit ist gilih in allen drin wisun. Ein gift des houbitgeltes ni wirdit in zwelifun '
+ + 'giteilit, ouh mit demo widarlegonten wuohhare nah gelte (' + f.pct(p.wiederanl, 2)
+ + ' bi jare) in derselbun zit gigolten. Der disan scaz firzerit in stat legenne, stat wirsiro.'; },
+ 'det.warn.lead': 'Ir stant uzer disemo giratanen wege: ',
+ 'det.warn.aussch': 'Ubar 100 teil hunt der nuzzidu ist niowiht ewareht zi der lones wantalungu. ',
+ 'det.warn.ngef': 'Der meisto teil dero gelto ist nals zinsskuldig nals geltskuldig — dirre teil gat in diu suhtsorgu, ana niowiht ginoman ana suhtsorgu eino. ',
+ 'det.warn.vb': 'Daz Versorgungsbezug gat ubar diu frihheit swidilingo; diu giscirmida der gansun frihheiti sinkit so 1/houbitgelt. ',
+ 'det.ann.intro': 'Diz irkennen hevit an ewa-fragon, dero 2026 noh ni alle giendot sint. Diu rehhanungu in klammeron sint eigana gitruwida.',
+ 'det.ann.notmodelled': '<b>Ni gibiladot:</b> minnirunga fora altares gelte, wantalunga des lones ana suht-, arbeitlos- inti kindes-lon, nah libentero sorga, unmaht des gitruwennes (PSVaG), wehsal zi anderemo longebon, kindes minnirunga in der sorgu, guota fresa nah § 32d Abs. 6 EStG, andes- inti grunttiuri-frihheit, langes libes ubar marka.',
+ 'det.prinzip': '<p>Widarmezzon <i>allero gelto</i> ni wari reht: lones wantalunga kumit fon demo al, eigan sparen kumit fon demo lutaren. So werdent der <b>lutar nuzzida</b> gilihho:</p>'
+ + '<p style="font-family:var(--mono);font-size:.82rem;background:var(--chip);padding:9px 11px;border-radius:9px">Lutar nuzzida = al gelt − geltes sparen − teil des longebon</p>'
+ + '<p>Daz selba wert in allen drin wisun gilegit wirdit. Daz bilibanta ist widarmezzunga der gizimbari, ni der gelte hohi.</p>'
+ + '<p><b>Zinses mera ist niowiht:</b> (1−t)·(1+r)ⁿ = (1+r)ⁿ·(1−t). Managfaltunga wentit. Bilibant fior irkennen:</p>'
+ + '<ol style="padding-left:1.2em;margin:.3em 0"><li>Zinses untarscheit t₀ − t₁</li>'
+ + '<li>Fremidi scaz — zuogift des longebon odo gifte</li>'
+ + '<li>zinsfriu gihaltunga — niowiht Vorabpauschale</li>'
+ + '<li>niuwiu gelt, diu einiga wisa berorent — suht/sorga ubar Versorgungsbezüge</li></ol>'
+ + '<p>Stab 4 ist der mahtigo scado der bAV, stab 2 ein gizimbari bezira. Der wuohhar der bAV <b>sinkit rehto io mit des geltes hohi</b>, wanta diu frihheit al ist inti diu giscirmida sinkit so 1/K — ni ist innan bezisto.</p>'
+ + '<p>Bi gisezziteru lutareru nuzzidu wirdit al gelt mit rehte widar girehhanot: N(B) ist io inti rehto wahsit (dN/dB = 1 − marka des geltmezes − marka des zinsmezes > 0), avur bi wraikwiton bi 4 inti 8 teil hunt BBG-RV, bi marku des geltes inti zinsmarkon ni mag daz ende widar girehhanot werdan. 34 rehti geband minnira denne ein teiling des zinses.</p>',
+ 'det.s.erg': 'Alle dri wisun in demo sparenne rehto daz selba wert fon demo lutaren koston.',
+ 'det.s.mon': 'Alle wisun bi selbera zit gigolten, nah hiutigemo werde. Wanta rehto gilt, diu rihti rehto samant girehhanont.',
+ 'det.s.diag': 'War umbi daz so ist — inti war ir stant uzer disemo giratanen wege.',
+ 'msg.linkCopied': 'Daz bant wirdit abagiscriban. Ther iz uflukit, siehit rehto disiu rehhanungu — niowiht durah maht gat.',
+ 'msg.linkFailed': 'Abascriban ni mohta. Daz bant stat nu in buoches stete.',
+ 'pwa.offline': '<b>Frie mag wesan ana bant.</b> Diz werk stat nu in maht-gihaltidu inti gat ana ruoren. Zi setzenne: bi iPhone „Teilen“ → „Zi eristen scilte“, bi Android disiu ana-hahi → „Werk setzen“.',
+ 'pwa.installAsk': '<b>Also werk setzen?</b> So stat mit eiganemo zeihhane an demo eristen scilte inti gat ana ruoren. ',
+ 'pwa.declined': 'Wola — daz werk gat oh so, inti ana ruoren.',
+ 'pwa.file': '<b>Ir hant daz buoh selbo uflukit</b> (<kbd>file://</kbd>). Al girehhanot, al gihaltan. Zwei wisun werkes gitriuwido sint andarsulih: ni zeihhan an demo eristen scilte inti ni gihaltida ana ruoren — daz hiar ni bidorfti wari, daz buoh ist io an disemo scazze. Zi fullemo bilide der werkgitriuwido, legit den giwerf an einan HTTPS-stat inti uflukit dana.'
+};
diff --git a/app/i18n.got.js b/app/i18n.got.js
new file mode 100644
index 0000000..b2930b8
--- /dev/null
+++ b/app/i18n.got.js
@@ -0,0 +1,639 @@
+/* =====================================================================
+ GUTISKA RAZDA — Gotisch, VOLLSTÄNDIG (459 Schlüssel).
+ Seit der zweiten Fassung auch die langen Erläuterungstexte, Fließtext-
+ Hinweise und Verdikt-Sätze übersetzt statt über tRaw() auf Deutsch
+ zurückzufallen. Für Fließtext gilt zwangsläufig ein niedrigerer
+ Vertrauensgrad als für die Feldnamen der ersten Fassung: Wulfilas
+ Corpus bietet keine Vorbilder für mehrgliedrige Konditionalsätze über
+ Freibeträge oder für Verweise auf Paragraphen, also folgen die neuen
+ Sätze überwiegend Haupt-Satz-Ketten mit „jah“ (und) und „akei“ (aber)
+ statt geschachtelter Unterordnung — Vertrauensgrad in die Syntax der
+ Fließtextpassagen etwa 20–25 %, in die wiederverwendeten Fachwörter
+ weiterhin die unten dokumentierten 30 %. Mathematische Formeln (N(B) =
+ …, (1−t)(1+r)ⁿ) bleiben als Symbole stehen, wie im Original.
+
+ Neu geprägt für die Fließtexte, nach denselben Ableitungsregeln:
+ witodis waldufni Rechtsanspruch (witoþ „Gesetz“ + waldufni „Macht“)
+ marka gibandins Beitragsbemessungsgrenze (marka „Grenze“ + gibands)
+ freihals Freibetrag/Freigrenze (belegt: „Freiheit“)
+ gadails Ehe-/Lebenspartner (belegt: „Teilhaber“)
+ wilja Zustimmung (belegt: „Wille“, vgl. Vaterunser)
+ gamainduþs kara gesetzliche Sozialversicherung (belegt gamainduþs
+ „Gemeinschaft“ + kara)
+ Diese sechs sind wie die 2026er-Kernliste unten Konstruktionen ohne
+ direkten Beleg, aber aus belegten Bausteinen — gleicher Vertrauensgrad.
+
+ ZUR SCHRIFT. Lateinische Umschrift nach Streitberg, nicht das gotische
+ Alphabet (U+10330–1034F). Der Grund ist nicht Bequemlichkeit: die App
+ lädt grundsätzlich keine Schriften von fremden Domains (siehe README
+ § 2), und für Wulfila-Gotisch gibt es auf keinem verbreiteten System
+ eine vorinstallierte Schrift. 𐌰𐌻𐌻𐌰𐌹𐌼 wären leere Kästchen. Die Umschrift
+ ist ohnehin die Form, in der das Gotische seit Streitberg gelesen wird.
+ þ = th, ƕ = hw, ai/au nach der Handschrift, nicht nach der Aussprache.
+
+ ZUR WORTWAHL. Das Korpus ist im Wesentlichen Wulfilas Bibel: rund 3.000
+ Lexeme, davon so gut wie keines aus dem Versicherungswesen. Was belegt
+ ist, wird benutzt:
+ faihu Vermögen, Geld (belegt, Mk 10,23 faihu)
+ skatts Münze, Geldstück (belegt, Mt 25,15)
+ gild Abgabe, Steuer (belegt, Lk 20,22 kaisaragild)
+ wokrs Zins (belegt, Lk 19,23 miþ wokra)
+ mizdo Lohn (belegt, Lk 10,7)
+ laun Entgelt, Belohnung (belegt, Mt 6,1)
+ asneis Lohnarbeiter (belegt, Mk 1,20; Lk 15,17)
+ jer, menoþs Jahr, Monat (belegt)
+ alds Lebenszeit, Alter (belegt, Lk 8,14)
+ hails gesund (belegt) → siukei Krankheit
+ razda Sprache (belegt, 1Kor 14)
+ dails Teil, Anteil (belegt)
+ rathjo Rechnung, Zahl (belegt, Lk 16,2 rathjon)
+ kara Sorge, Fürsorge (belegt, Joh 12,6)
+ Geprägt auf gotischen Stämmen, mit gotischen Ableitungssuffixen, aber
+ ohne Beleg — Vertrauensgrad in die Idiomatik etwa 30 %:
+ gagaleikeins Vergleich (gagaleikon „gleichmachen“ + -eins wie
+ laiseins, daupeins)
+ mizdogibands Arbeitgeber (mizdo + gibands, Part. Präs. von giban)
+ haubidafaihu Kapital, Hauptsumme (nach lat. caput/capitale)
+ faihufrikei Inflation? NEIN — das heißt belegt „Habgier“, deshalb
+ hier stattdessen wairþis wahstus „Preiswachstum“
+ siukeikara Krankenversicherung (siukei + kara)
+ aldiskara Altersvorsorge
+ ETF bleibt als lateinische Fremdabkürzung stehen; ein gotisches Wort
+ dafür zu erfinden wäre Kostümierung, keine Übersetzung.
+ Die Gesetzesfundstellen bleiben deutsch: es gibt sie amtlich nur so.
+ ===================================================================== */
+window.I18N_GOT = {
+ 'f.I:gehalt.label': 'Mizdo alljis jeris, alla, himma daga',
+ 'f.I:beitrag.label': 'Menoþis gibands du bAV, alls',
+ 'f.I:netto_ziel.label': 'Menoþis wilwands, hrains',
+ 'f.I:agzus.label': 'Anaaukans þis mizdogibandins',
+ 'f.I:agz_fix.label': 'Anaaukans gasatiþs, ana þamma',
+ 'f.I:agz_fix_dyn.label': 'Þana gasatidan anaaukan wahsjan',
+ 'f.I:agz_fix_dyn.o0': 'bi namin, unwandiþs',
+ 'f.I:agz_fix_dyn.o1': 'miþ þamma mizdon',
+ 'f.I:agzus_sv.label': 'Haidus þis anaaukanis',
+ 'f.I:agzus_sv.o0': 'alls gibands',
+ 'f.I:agzus_sv.o1': 'þata freihals dail ainata',
+ 'f.I:agzus_sv.o2': 'bi sunjai rathiþ',
+ 'f.I:dyn.label': 'Þana gibandan wahsjan',
+ 'f.I:dyn.o1': 'miþ þamma mizdon',
+ 'f.I:dyn.o0': 'bi namin, unwandiþs',
+ 'f.I:rendite.label': 'Alls akrans þis ETF bi jera',
+ 'f.I:alter.label': 'Alds himma daga',
+ 'f.I:alter.unit': 'jera',
+ 'f.I:rentbeg.label': 'Anastodeins þizos gibos',
+ 'f.I:rentbeg.unit': 'jera',
+ 'f.I:kv_ruhe.label': 'Siukeikara in aldin',
+ 'f.I:kv_ruhe.o1': 'bi witoda',
+ 'f.I:kv_ruhe.o2': 'seina',
+ 'f.I:auszform.label': 'Giba þizos bAV',
+ 'f.I:auszform.o1': 'haubidafaihu',
+ 'f.I:auszform.o2': 'gild all ald',
+ 'f.I:teilkap.label': 'Altersvorsorgedepot: ains gibans at anastodeinai',
+ 'f.I:av_auszform.label': 'Altersvorsorgedepot: þata anþar',
+ 'f.I:av_auszform.o1': 'garaideins gibos',
+ 'f.I:av_auszform.o2': 'gild all ald',
+ 'f.I:agz_fix_min.label': 'Minnists seins gibands du þamma gasatidin anaaukan',
+ 'f.I:rentfak_av.label': 'Gildis rathjo þis Altersvorsorgedepot',
+ 'f.I:rentfak_av.unit': '€ bi 10.000 €',
+ 'f.I:rentdyn_av.label': 'Wahstus þis faihugildis bi jera',
+ 'f.I:rentfak.label': 'Gildis rathjo þizos bAV',
+ 'f.I:rentfak.unit': '€ bi 10.000 €',
+ 'f.I:rentdyn.label': 'Wahstus þis bAV-gildis bi jera',
+ 'f.I:fuenftel.label': 'Þo fimftons witoþ sokjan',
+ 'f.I:fuenftel.o0': 'ne (arniba)',
+ 'f.I:fuenftel.o1': 'ja',
+ 'f.I:planende.label': 'Marka þizos gagaleikeinais und aldai',
+ 'f.I:planende.unit': 'jera',
+ 'f.I:ausscheid.label': 'Afleiþan af þamma waurstwa',
+ 'f.I:ausscheid.unit': 'jera',
+ 'f.I:tzalter.label': 'Halb waurstw fram aldai',
+ 'f.I:tzalter.unit': 'jera',
+ 'f.I:tzfaktor.label': 'Rathjo þis halbins waurstwis',
+ 'f.I:gsteig.label': 'Wahstus þis mizdons bi jera',
+ 'f.I:stkl.label': 'Haidus þis gildis',
+ 'f.I:stkl.o1': 'sundro',
+ 'f.I:stkl.o3': 'samana (bi halbam)',
+ 'f.I:partner.label': 'gildis waírþ þis gadailans',
+ 'f.I:kist.label': 'Rathjo þis aíkklesjons gildis',
+ 'f.I:tarifanp.label': 'Wandeins þizo gildis marko bi jera',
+ 'f.I:kinder.label': 'Rathjo barne',
+ 'f.I:kind_jahre.label': 'Jera miþ barne giban',
+ 'f.I:kind_jahre.unit': 'jera',
+ 'f.I:kinderlos.label': 'Unbarnahs (anaaukans kararis)',
+ 'f.I:kinderlos.o0': 'ne',
+ 'f.I:kinderlos.o1': 'ja',
+ 'f.I:k_bav.label': 'Wilwa þis bAV-waurstwis bi jera',
+ 'f.I:k_av.label': 'Wilwa þis Altersvorsorgedepot bi jera',
+ 'f.I:k_priv.label': 'Wilwa þis seinis ETF-faihu bi jera',
+ 'f.I:infl.label': 'Wairþis wahstus bi jera',
+ 'f.I:sonst_zve.label': 'anþar gildis waírþ in aldin',
+ 'f.I:rente_br.label': 'gild bi witoda, all, bi jera',
+ 'f.P:bbg_rv.label': 'Marka gibandins þizos aldis kara (bi jera)',
+ 'f.P:bbg_kv.label': 'Marka gibandins siukeins jah kararis',
+ 'f.P:bezug.label': 'Bezugsgröße (menoþis)',
+ 'f.P:de_rv.label': 'Mizdo bi midjai (RV)',
+ 'f.P:rw.label': 'Waírþ þis gildis stikis nu',
+ 'f.P:rw.unit': '€',
+ 'f.P:rv_an.label': 'Aldis gibands, dails þis asneis',
+ 'f.P:av_an.label': 'Unwaurstwis gibands, dails þis asneis',
+ 'f.P:kv_allg.label': 'Allamma rathjo þizos siukeikara',
+ 'f.P:kv_zus.label': 'Anaaukans gibands siukeins bi midjai',
+ 'f.P:pv_ges.label': 'Alla rathjo þis kararis',
+ 'f.P:pv_an.label': 'Kara, dails þis asneis',
+ 'f.P:pv_kl.label': 'Kara, anaaukans unbarnahaize',
+ 'f.P:gfb.label': 'Grunduns freihals (andeis razdos 1)',
+ 'f.P:e2.label': 'Andeis razdos 2',
+ 'f.P:e3.label': 'Andeis razdos 3',
+ 'f.P:e4.label': 'Anastodeins razdos 5 (gabigaize gild)',
+ 'f.P:a2.label': 'Faihugawaurki a₂',
+ 'f.P:b2.label': 'Faihugawaurki b₂',
+ 'f.P:a3.label': 'Faihugawaurki a₃',
+ 'f.P:b3.label': 'Faihugawaurki b₃',
+ 'f.P:c3.label': 'Unwandiþ c₃',
+ 'f.P:c4.label': 'Unwandiþ c₄',
+ 'f.P:c5.label': 'Unwandiþ c₅',
+ 'f.P:soli.label': 'Gamainduþs anaaukans',
+ 'f.P:soli_fg.label': 'Freihals marka þis anaaukanis',
+ 'f.P:soli_mz.label': 'Qairrei marka, marko kaurei',
+ 'f.P:an_pausch.label': 'Asnje afmaitans, gasatiþs',
+ 'f.P:sa_pausch.label': 'Sundro wilwe afmaitans, gasatiþs',
+ 'f.P:kapst.label': 'Rathjo þis faihu gildis',
+ 'f.P:tfs.label': 'Halbs freihals dailefaihu',
+ 'f.P:sparerpb.label': 'Bairgandins afmaitans, gasatiþs',
+ 'f.P:basiszins.label': 'Grunduns wokrs þizos Vorabpauschale',
+ 'f.P:vp_faktor.label': 'Faihugawaurki þis grunduns akranis',
+ 'f.P:st_frei_q.label': 'gildis freis § 3 Nr. 63 (dails BBG-RV)',
+ 'f.P:sv_frei_q.label': 'gibandins freis (dails BBG-RV)',
+ 'f.P:zul_g1.label': 'Giba, staþs 1 (bi ƕarjamme € seinis gibandins)',
+ 'f.P:zul_s1.label': 'Marka staþis 1',
+ 'f.P:zul_g2.label': 'Giba, staþs 2 (bi ƕarjamme € seinis gibandins)',
+ 'f.P:zul_s2.label': 'Marka staþis 2',
+ 'f.P:kind_zul.label': 'Giba bi ƕarjamme barna',
+ 'f.P:av_max.label': 'Maists gibands bi jera',
+ 'f.P:av_sa_max.label': 'Maists afmaitans § 10a',
+ 'f.P:ertragsq.label': 'Dails þis akranis (alds 67)',
+ 'f.P:halb.label': 'gildis skula dails þis missadailis',
+
+ /* ---------------- Waddjus, augadauro-namna ---------------- */
+ 'app.title': 'Aldiskaros gagaleikeins',
+ 'hdr.title': 'Aldiskaros gagaleikeins',
+ 'win.header': 'Aldiskaros gagaleikeins',
+ 'win.result': 'Urruns',
+ 'win.input': 'Þeina waurda',
+ 'win.chart': 'Melja',
+ 'win.extra': 'Anþara waurda',
+ 'win.calc': 'Wigs þizos rathjons',
+ 'win.share': 'Bairgan jah gadailjan',
+ 'win.min': 'Gamaurgjan',
+ 'win.restore': 'Aftra gasatjan',
+ 'win.n': function(p){ return 'Augadauro ' + p.n; },
+ 'ui.share': 'Gabinda miþ meinaim rathjom afmeljan',
+ 'ui.export': 'Swe boka bairgan',
+ 'ui.import': 'Boka usniman',
+ 'ui.reset': 'All aftra gasatjan',
+ 'ui.pin.set': 'Swe garaideins gamunan',
+ 'ui.pin.clear': 'Þo garaidein andbindan',
+ 'ui.lang': 'Razda',
+ 'ui.lang.aria': 'Razda waljan',
+ 'ui.lang.partial': 'dailamma ainamma gaskeiriþ',
+ 'ui.lang.partialNote': 'So razda ist <b>dailamma gaskeiriþa</b>: þata andwairþi, þo namna þize staþe, þo haubida þizo bokó jah þos meljo taikneis sind her. Þo langona witodis gaskeireinos — þo waurda undar <span class="qm" style="cursor:default">?</span> at þaim staþam, so staua jah sa wigs þizos rathjons — Þiudiskai razdai ataugjand. Þo witodis gameleina (BetrAVG, EStG, SGB V) in allaim razdom Þiudiska wisand: bi þiudangardjai ni sind anþaraleikos.',
+ 'sb.up': 'Iup du þamma urrunsa',
+
+ /* ---------------- Þos þrins wiljos ---------------- */
+ 'opt.bav.name': 'bAV (mizdons inmaideins)',
+ 'opt.bav.short': 'bAV',
+ 'opt.bav.nom': 'so waurstwis aldiskara',
+ 'opt.bav.satz': 'So waurstwis aldiskara',
+ 'opt.bav.gen': 'þizos bAV',
+ 'opt.av.name': 'Altersvorsorgedepot',
+ 'opt.av.short': 'AV-faihu',
+ 'opt.av.nom': 'þata Altersvorsorgedepot',
+ 'opt.av.satz': 'Þata Altersvorsorgedepot',
+ 'opt.av.gen': 'þis Altersvorsorgedepot',
+ 'opt.priv.name': 'sein ETF-faihu',
+ 'opt.priv.short': 'sein',
+ 'opt.priv.nom': 'þata sein ETF-faihu',
+ 'opt.priv.satz': 'Þata sein ETF-faihu',
+ 'opt.priv.gen': 'þis seinis ETF-faihus',
+
+ /* ---------------- Taikneis ---------------- */
+ 'metric.monat.label': 'Menoþis giba',
+ 'metric.monat.unit': '€/menoþ',
+ 'metric.ertrag.label': 'Hrains gawaurki (waírþ nu)',
+ 'metric.ertrag.unit': '€',
+ 'metric.irr.label': 'Inna wokrs',
+ 'metric.irr.unit': '% bi jera',
+ 'metric.kapital.label': 'Haubidafaihu at gildis anastodeinai',
+ 'metric.kapital.unit': '€',
+ 'metric.pa': ' bi jera',
+ 'metric.pp': ' dailos hunda',
+ 'metric.short.monat': 'Menoþs',
+ 'metric.short.ertrag': 'Gawaurki',
+ 'metric.short.irr': 'IRR',
+ 'metric.short.kapital': 'Faihu',
+
+ /* ---------------- Staþeis waurde ---------------- */
+ 'unit.pct': '%',
+ 'unit.eur': '€',
+ 'unit.eurm': '€/menoþ',
+ 'ui.hintFor': function(p){ return 'Gaskeireins bi: ' + p.label; },
+ 'ui.cnt.legal': function(p){ return p.n + ' rathjons mikilein'; },
+ 'ui.cnt.fields': function(p){ return p.n + ' staþeis'; },
+ 'group.bav': 'Anaaukans jah gibos haidjus bi ainƕarjammeh',
+ 'group.person': 'Mel, afleiþan, halb waurstw',
+ 'group.steuer': 'Gild, gildis haidus, barna',
+ 'group.markt': 'Wilwa jah wairþis wahstus',
+ 'group.ruhe': 'Alds',
+ 'group.p_sv': 'Rathjons mikilein: gamainduþs kara 2026',
+ 'group.p_est': 'Rathjons mikilein: gild waírþis 2026 (§ 32a EStG)',
+ 'group.p_kap': 'Rathjons mikilein: faihu- jah dailefaihu gild',
+ 'group.p_bav': 'Rathjons mikilein: waurstwis jah gibanoda seina kara',
+
+ /* ---------------- Urrunsis bokos ---------------- */
+ 'card.lead': 'faurþis',
+ 'card.unchanged': 'unwandiþ',
+ 'base.pinned': 'Δ wiþra þata gamunana',
+ 'base.delta': function(p){ return 'Δ ' + p.desc; },
+ 'base.none': 'Wagei ƕana raidjan — so inmaideins her swe Δ atgaggiþ.',
+ 'base.desc.prev': 'þata faurþis',
+ 'base.desc.pinned': 'þata gamunano',
+ 'base.desc.change': function(p){ return 'faur þo inmaidein þis „' + p.label + '“'; },
+ 'verdict.pp': function(p){ return p.v + ' dailos hunda'; },
+
+ /* ---------------- Miþgaggando bandi ---------------- */
+ 'sb.cap': function(p){ return p.label + ' · ' + p.unit + (p.kaufkraft ? ', bi himma daga waírþa' : ''); },
+ 'sb.aria': function(p){ return 'Urruns: ' + p.label; },
+
+ /* ---------------- Melja ---------------- */
+ 'tab.sens': 'Gafeheins',
+ 'tab.wf': 'Waírþis urrunsa',
+ 'tab.kap': 'Faihus wigs',
+ 'tab.zer': 'Menoþis gadailjan',
+ 'chart.error': function(p){ return 'Meljan ni mag: ' + p.msg; },
+ 'sens.legendY': function(p){ return 'y: ' + p.label + ' (' + p.unit + ')'; },
+ 'wf.up': 'ushafjiþ þata gawaurki',
+ 'wf.down': 'gadrausjiþ þata gawaurki',
+ 'wf.legend': 'Waírþ nu þis hrainis gawaurkis, bi himma daga waírþa',
+ 'wf.barinfo': function(p){ return p.label + ': ' + p.note; },
+ 'wfb.vp.label': 'Aflageins þizos Vorabpauschale',
+ 'wfb.zul.label': 'Gibos jah sundro wilwe afmaitans',
+ 'wfb.arch.label': 'Gildis gatimreins (þata anþar)',
+ 'wfb.agz.label': 'Anaaukans þis mizdogibandins',
+ 'wfb.tarif.label': 'Gildis missadails jah þata anþar',
+ 'wfb.kvpv.label': 'Siukei jah kara ana Versorgungsbezüge',
+ 'wfb.ep.label': 'Fralust gildis stike',
+ 'kap.rentbeg': 'Gildis anastodeins',
+ 'kap.swap': 'Faihu → gildis waldufni',
+ 'kap.legend': 'ganoh: all &nbsp;·&nbsp; gamaitan: freis',
+ 'zer.netto': 'hrains',
+ 'zer.tax': 'gild',
+ 'zer.kv': 'siukei/kara',
+ 'zer.pension': 'gild bi witoda',
+ 'zer.legend': '<span><i style="background:#808080"></i>gild</span><span><i style="background:#800000"></i>siukei/kara</span><span><i style="background:#800080"></i>fralusan gild bi witoda</span><span style="margin-left:auto">faihs grunduns = þata aflifnando</span>',
+
+ /* ---------------- Wigs þizos rathjons ---------------- */
+ 'det.h.bav': 'bAV',
+ 'det.h.av': 'AV-faihu',
+ 'det.h.priv': 'sein',
+ 'det.h.kennzahl': 'Taikns',
+ 'det.h.wert': 'Waírþ',
+ 'det.erg.netto': 'All us þamma hrainin gibans (bi namin)',
+ 'det.erg.fremd': 'Framaþi faihu (anaaukans aiþþau gibos)',
+ 'det.erg.kapital': 'Faihu at anastodeinai þizos gibos',
+ 'det.erg.brutto': 'All þizo allaizo gibo',
+ 'det.erg.steuer': 'þizei waírþis- jah faihugild',
+ 'det.erg.kvpv': 'þizei siukeikara jah kara',
+ 'det.erg.rentenverlust': 'Fralust þis gildis bi witoda (gamanwiþ)',
+ 'det.erg.nettoausz': 'All þizo hrainjaizo gibo (bi namin)',
+ 'det.erg.bwausz': 'Waírþ nu þizo hrainjaizo gibo',
+ 'det.erg.bwaufw': 'Waírþ nu þis hrainis wilwis',
+ 'det.erg.ertrag': 'Waírþ nu þis hrainis gawaurkis',
+ 'det.erg.verhaeltnis': 'Rathjo gawaurkis du wilwa',
+ 'det.erg.irr': 'Inna wokrs (bi namin)',
+ 'det.erg.vorsprung': 'Faurþis wiþra þata sein faihu',
+ 'det.mon.brutto': 'Alla giba bi menoþ',
+ 'det.mon.steuer': 'inuh waírþis- jah faihugild',
+ 'det.mon.kvpv': 'inuh siukeikara jah kara',
+ 'det.mon.ep': 'inuh fralust þis gildis bi witoda',
+ 'det.mon.netto': 'HRAINS BI MENOÞ (bi himma daga waírþa)',
+ 'det.diag.beitrag': 'Alls gibands bAV bi menoþ',
+ 'det.diag.aufwand': 'Hrains wilwa bi menoþ (frumist jer)',
+ 'det.diag.grenzsteuer': 'Marko gildis rathjo in bairgandein (frumist jer)',
+ 'det.diag.ersparnis': 'Alla bairgandeins rathjo (gild jah gibandeis), frumist jer',
+ 'det.diag.svAG': 'sunjeina bairgandeins þis mizdogibandins',
+ 'det.diag.svAN': 'sunjeina bairgandeins þis asneis',
+ 'det.diag.ngef': 'Dails þize bAV-gibande inuh giba (frumist jer)',
+ 'det.diag.aussch': 'Brukeins þis witodis waldufnjis (4 % BBG-RV)',
+ 'det.diag.agzVar': 'þizei anaaukans: bi hunda (frumist jer)',
+ 'det.diag.agzFix': 'þizei anaaukans: gasatiþ waírþ (frumist jer)',
+ 'det.diag.agzFixUeber4': 'gasatiþs anaaukans ufar þamma 4-%-kasa (ni rathiþs swe kaurei)',
+ 'det.diag.vbMonat': 'Versorgungsbezug bi menoþ at anastodeinai',
+ 'det.diag.freibetrag': 'Freihals Versorgungsbezüge in þamma samin jera',
+ 'det.diag.vbQuote': 'Rathjo Versorgungsbezug du þamma freihalsa',
+ 'det.diag.kapFreiKapital': 'gibandins freis mahteigs faihu (faihus giba)',
+ 'det.diag.kapFreiRente': 'gibandins freis mahteigs faihu (gild all ald)',
+ 'det.diag.memoRest': 'GAMUNAN: bAV-gildis gibos afar þizai markai',
+ 'det.diag.memoRestAv': 'GAMUNAN: faihugild afar þizai markai',
+ 'det.diag.wiederanl': 'Aftra lagjandins wokrs afar gilda',
+ 'det.diag.kapstEff': 'sunjeins faihugild miþ anaaukana jah aíkklesjons gilda',
+ 'det.diag.bestAnteil': 'Gildis skula dails þis gildis bi witoda',
+ 'det.anspar.h.jahr': 'Jer',
+ 'det.anspar.h.brutto': 'All',
+ 'det.anspar.h.beitrag': 'bAV-gibands',
+ 'det.anspar.h.agzVar': 'Anaauk. %',
+ 'det.anspar.h.agzFix': 'Anaauk. gasat.',
+ 'det.anspar.h.sv': 'Gib.-bairg.',
+ 'det.anspar.h.st': 'Gildis bairg.',
+ 'det.anspar.h.netto': 'Hrains wilwa',
+ 'det.anspar.h.zul': 'Gibos',
+ 'det.anspar.h.kbav': 'Faihu bAV',
+ 'det.anspar.h.kav': 'Faihu AV',
+ 'det.anspar.h.kpriv': 'Faihu sein',
+ 'det.row.year': function(p){ return p.jahr + ' (alds ' + p.alter + ')'; },
+ 'det.ausz.h.jahr': 'Jer',
+ 'det.ausz.h.bavBr': 'bAV all',
+ 'det.ausz.h.kvpv': 'siukei/kara',
+ 'det.ausz.h.steuer': 'Gild',
+ 'det.ausz.h.mind': 'Gildis minneins',
+ 'det.ausz.h.bavNet': 'bAV hrains',
+ 'det.ausz.h.avBr': 'AV all',
+ 'det.ausz.h.avNet': 'AV hrains',
+ 'det.ausz.h.privBr': 'sein all',
+ 'det.ausz.h.privNet': 'sein hrains',
+ 'det.ann.h.annahme': 'Anahaha',
+ 'det.ann.h.vertrauen': 'Trauains',
+ 'det.ann.h.anmerkung': 'Gameleins',
+ 'det.ann.r1.a': 'Rathjons mikilein 2026, § 32a-gild 2026',
+ 'det.ann.r1.c': 'SVBezGrV 2026, Steuerfortentwicklungsgesetz',
+ 'det.ann.r2.a': 'Skula siukeins jah kararis ana Versorgungsbezüge',
+ 'det.ann.r2.c': '§§ 229, 250 SGB V',
+ 'det.ann.r3.a': 'Freihals § 226 Abs. 2 S. 2 SGB V (siukei)',
+ 'det.ann.r3.c': 'unsakans',
+ 'det.ann.r4.a': 'Marka in staþ freihalsis in þamma kararja',
+ 'det.ann.r4.c': 'so managista missataujands in raginon',
+ 'det.ann.r5.a': 'Gibandins freihals þizos AV-faihus gibos',
+ 'det.ann.r5.c': 'ni sind Versorgungsbezüge',
+ 'det.ann.r6.a': 'Halbs missadails du unigibanaim dailam',
+ 'det.ann.r6.c': '§ 22 Nr. 5 S. 2 Buchst. b i.V.m. § 20 Abs. 1 Nr. 6 S. 2 EStG',
+ 'det.ann.r7.a': 'Anaaukans und þo sunjeinon bairgandein ainata',
+ 'det.ann.r7.c': 'so anþara ragin þo 15 % swe bloþa gasateins liusiþ',
+ 'det.ann.r8.a': 'Sundro wilwe maists 2.340 €',
+ 'det.ann.r8.c': 'ANAHAHA ÞIS FRISAHTIS. Stojiþ, jabai barn þata waírþ þis AV-faihus ushafjiþ aiþþau gadrausjiþ',
+ 'det.ann.r9.a': 'KVdR-skula kara in aldin anahahana',
+ 'det.ann.r9.c': 'wiljandans gakarodai ni gasokidai',
+ 'det.t.prinzip': 'So anastodeins þizos gagaleikeinais',
+ 'det.t.erg': 'Urruns bi ainƕarjammeh',
+ 'det.t.mon': 'Menoþis giba, gadailiþa',
+ 'det.t.diag': 'Gasakeins',
+ 'det.t.anspar': 'Bairgandeins, jer bi jera',
+ 'det.t.ausz': 'Gibos mel, jer bi jera',
+ 'det.t.ann': 'Swinþei þizo anahahano',
+
+ /* ---------------- Bairgan jah gadailjan ---------------- */
+ 'msg.loaded': 'Usnumana.',
+ 'msg.loadError': function(p){ return 'So boka ussiggwan ni mahta: ' + p.msg; },
+ 'msg.reset': 'Aftra gasatiþ du þamma grunduna.',
+
+ /* ---------------- PWA ---------------- */
+ 'pwa.installBtn': 'Gasatjan',
+ 'pwa.installed': '<b>Gasatiþ.</b> Nu bigitis þata waurstw miþ þaim anþaraim.',
+
+ /* ---------------- Gaskeireinos at þaim staþam (?) — niujaims frisahtim, laggizo taikneins ---------------- */
+ 'f.I:gehalt.hint': 'Inuh ainmeljam gibom. Markeiþ þeinana gildis marka jah þamma markin gibandins.',
+ 'f.I:beitrag.hint': 'Alls gibands bi witoda § 1a BetrAVG. Witodis waldufni ist ains und 4 dailos hunda þizos markos gibandins RV; ufaro þarf wiljan þis mizdogibandins.',
+ 'f.I:netto_ziel.hint': 'Þata waírþ, þatei þeinata faihu minneiþ in frumistin jera — sa sunjeino afletands brukeins. Þata samo waírþ in allaim þrim wiljom lagjada; þata ist du garaihtai gagaleikeinai. Bi þamma allin gibandin marka wahseiþ sinteino, jah mag aftra rathjan.',
+ 'f.I:agzus.hint': 'Witodis minnists 15 dailos hunda (§ 1a Abs. 1a BetrAVG); managai mizdogibandans maizo giband. Faur galeikan wiþra þata sein faihu jainar, þarei anaaukans jah sein faihu galeika sind, bi rathjons kurvai gakannjan mag.',
+ 'f.I:agz_fix.hint': 'Gasatiþs anaaukans us gildis triggwai aiþþau waurstwis gaqissai — bi Deutsche Bahn jah managaim anþaraim triggwom, þarei anaaukan du 15 dailom hunda § 1a Abs. 1a BetrAVG. Sa ist gibands þis mizdogibandins bi § 3 Nr. 63 EStG jah gafulleiþ frumist þana 8-%- jah 4-%-kas (§ 1 Abs. 1 S. 1 Nr. 9 SvEV): þeina eigin inmaideins þau minnizo jah diurizo wairþiþ.',
+ 'f.I:agz_fix_dyn.hint': 'Gasatiþa waírþa standand bi namin in triggwai jah wahsjand ains at niujaim triggwom — þata frumo bi namin unwandiþ. Bi 27 jerarm jah 2 dailom hunda wairþis wahstaus aflifniþ 1,02⁻²⁷ ≈ 0,59; sa izei þata filu unweniggo domeiþ, waljai „miþ þamma mizdon“.',
+ 'f.I:agzus_sv.hint': '„Bi sunjai rathiþ“ ist witodis waurd: § 1a Abs. 1a BetrAVG skula ist anaaukan swa filu, swa filu sunjeino sa mizdogibands gibandeins ganohjiþ. Jabai þeina mizdo ufar bajoþum markom ist, ni waihts ganohjiþ jah ni waihts skula ist. Bi þamma raidjan in frumistin faihau bi 21 dailom hunda ustauhans wairþiþ. Trauains þis rathidins hugis wisiþ bi 75 dailom hunda.',
+ 'f.I:dyn.hint': 'Jabai sa gibands wahseiþ miþ mizdons wahstau, brukeins þis 8-%-kasis jerarm samalaus stands. Jabai bi namin unwandiþs standiþ, waírþ is gadrauseiþ miþ wairþis wahstau — jah so hraina wilwa, þoei þo anþaro twa wilja gakannjan skulun, samalaus gadrauseiþ.',
+ 'f.I:rendite.hint': 'Faur wilwa, faur gild. In allaim þrim wiljom sama ETF — swa aina galeikan mag gibandane gatimreins, ni faihufrijans domos.',
+ 'f.I:alter.hint': 'Anastodeins þizos bairgandeins. Jer 0 = 2026.',
+ 'f.I:rentbeg.hint': 'Anastodeins þizos gibos allaim þrim wiljom. Þata Altersvorsorgedepot mag frumist fram 65 jeram gibada (niujoþ 2026).',
+ 'f.I:kv_ruhe.hint': 'Sa mahteiga skalks. In witodis siukeikarai waurstwis gild sind Versorgungsbezüge jah bairand alla gibandeins rathjo (§§ 229, 250 SGB V); seina aldiskara ni bairiþ. Aina þata gasateins urruns wandeiþ.',
+ 'f.I:auszform.hint': 'Haubidafaihu: in jera niman gildis skula all, siukeins gibandeis ana 120 menoþum gadailidai (§ 229 Abs. 1 S. 3 SGB V). Þata gild all ald þana niman ufar alla libains ufþanjiþ jah swa managizo faihu undar þamma samin freihalsa gaskeirmeiþ. Sa frisahts kann ains all aiþþau ni waiht; halba haubidafaihu bAV ni ist frisahtida.',
+ 'f.I:teilkap.hint': 'Und 30 dailos hunda þis bairgadins faihaus mag at anastodeinai þizos gibos swe ains gibans niman — in bajoþum haidum. Sa kostuli ist twaim fairinom: alla wahsteins in jera niman jah afar þamma ains wokrs afar faihugilda. Þata ufarist ufar jeris maistin waírþa (,,sleeve") inuh ainana gibans gildada; þata ist frisahtis biuhti, ni witodis waihts.',
+ 'f.I:av_auszform.hint': 'Þata þatei miþ þamma faihau afar þamma ainamma gibanin gataujada — sundro af þamma bAV-anahaha. Garaideins gibos: þata faihu bairgada jah miþ wokra niman wairþiþ; so unigibana dails miþ halbamma missadailis gildada. Gild all ald: haubidafaihu du þamma gibandin galeiþiþ, akei so unigibana dails ains miþ akranis dailai gildada (§ 22 Nr. 5 S. 2 Buchst. a EStG, 17 dailos hunda fram 67 jeram, her 26 dailos hunda). So gibana dails in bajoþum haidum all afargildan wisiþ, þata ni wandeiþ.',
+ 'f.I:agz_fix_min.hint': 'Galeikonda frisahta gabindand gasatiþ waírþ du minnistin eiginamma gibandin. 0 qiþiþ inuh haha — þan þata anaaukan in ƕarjammeh jera waurstwis rinniþ, jah miþ ni waihtai gibandin. Saíƕ du frisahtis hugja: sunjeins inuh haha anaaukans ni wesi missadails þis inmaideinais anahaha jah galagidedi wiþra bAV, þauhjabai jah inuh inmaidein rinnaidi. Ana-melei ains þata izei bi sunjai at gadaila hangeiþ.',
+ 'f.I:rentfak_av.hint': 'Ains at þamma faihau gild waírþandin. Faurgasatiþ swaswe at bAV; faihus triggwa inuh siukeinai gawi wisan mag jah swa batizo wisan. At 0 nist gild.',
+ 'f.I:rentdyn_av.hint': 'Ufarwaurstw dails aiþþau gawi wahstus in gildis melam þis faihus triggwons.',
+ 'f.I:rentfak.hint': 'Ains at gibos haidau „gild“. 26 € menoþis gild bi 10.000 € ist swe 3,1 dailos hunda niman. Standiþ in bokom þis waurstwis kunþeis.',
+ 'f.I:rentdyn.hint': 'Ufarwaurstw dails aiþþau gawi wahstus in gildis melam.',
+ 'f.I:fuenftel.hint': '§ 34 EStG at garaidamma haubidafaihaus giban us § 3 Nr. 63-triggwom bi BFH X R 23/15 ains suman brukjada. Arniba: ne.',
+ 'f.I:planende.hint': 'Garaideins gibos rinnand und her. Gild all ald bi samin markai galeikada; þata þatei afar rinniþ, standiþ swe gamunan undar „Gasakeinai“. Sa izei alds wairþiþ, jainar gawinniþ.',
+ 'f.I:ausscheid.hint': 'Fram her ni mizdo ni gibands. Þata faihu wokreiþ und anastodein þizos gibos.',
+ 'f.I:tzalter.hint': 'Ƕarjatoh waírþ fram gibos anastodeinai qiþiþ: ni halb waurstw. Faurgasatiþ þaruh ist 67.',
+ 'f.I:tzfaktor.hint': 'Dails þizos fulla waurstwis mizdons. 60 dailos hunda = 60-hunda staþs.',
+ 'f.I:gsteig.hint': 'Jah bairiþ faurþis markos gibandins, Bezugsgröße, midjaizos mizdons jah gildis waírþis.',
+ 'f.I:stkl.hint': 'Mahteigata ist sa GILDIS HAIDUS, ni sa mizdons gildis flokks: sa flokks stiuriþ ains in jera afmaitans, jera bokos rathjand swa-þeh miþ halbam bi § 32a Abs. 5 EStG. At „samana“ nauþaba ana-mel þata gildis waírþ þis gadailans.',
+ 'f.I:partner.hint': 'Ains at samana gilda. Rathjada 2·ESt((zvE + zvE_gadails)/2).',
+ 'f.I:kist.hint': '8 dailos hunda in Bayern jah Baden-Württemberg, aljaþro 9, 0 uslaisjandin us aíkklesjon. Jah faihugild gateihiþ: 0,25/(1+0,25k)·(1+0,055+k).',
+ 'f.I:tarifanp.hint': 'All gild wraidjada bi faihugawaurkja λ = (1+x)^t: ESt = s·λ·T(zvE/s/λ). Þata samalaus ist swaswe allaize marko galeika wraist. 0 dailos hunda ataugeiþ all kalda wahstu.',
+ 'f.I:kinder.hint': 'Barne giba in Altersvorsorgedepot: 1 € bi ƕarjamme € gibanamma, und 300 € bi barna.',
+ 'f.I:kind_jahre.hint': 'So barne giba hangeiþ at waldufnja barne mizdons (§ 85 EStG), þaruh ni rinniþ all þairh bairgandein.',
+ 'f.I:kinderlos.hint': '0,6 dailos hunda anaaukans du kararis gibandein, ains us asneis (§ 55 Abs. 3 SGB XI).',
+ 'f.I:k_bav.hint': 'Siukeinai gawi jah TER. Sunjeina wilwa standand in bokom kunþeis — jainar saíƕ, ni domei.',
+ 'f.I:k_av.hint': 'At garaidamma faihau sunjeina wilwa bi witoda markida sind du 1,0 daila hunda bi jera.',
+ 'f.I:k_priv.hint': 'Hlutrs TER breidis fairƕaus ETF.',
+ 'f.I:infl.hint': 'Gadraus rathjo allaim waírþam „bi himma daga waírþa“. Lytil wandeiþ þo raihtein, akei alla hauheins.',
+ 'f.I:sonst_zve.hint': 'Frumist so gildis skula dails þis gildis bi witoda, inuh þo her galeikanona faihu. Markeiþ marko gildis rathjo in gibos melam — jah swa gildis missadails t₀ − t₁.',
+ 'f.I:rente_br.hint': 'Ains du markai in siukeikarai: gild bi witoda jah Versorgungsbezüge aina marka gibandins gadailand (§ 223 Abs. 3 SGB V).',
+ 'f.P:bbg_rv.hint': 'SVBezGrV 2026 (BGBl. 2025 I Nr. 116), samalaus and alla þiudangardja.',
+ 'f.P:bbg_kv.hint': 'SVBezGrV 2026; 5.812,50 € bi menoþ.',
+ 'f.P:bezug.hint': 'SVBezGrV 2026, 47.460 € bi jera. Ains tigjus dails þis ist sa freihals Versorgungsbezüge in siukeikarai (§ 226 Abs. 2 S. 2 SGB V).',
+ 'f.P:de_rv.hint': 'Anahangs 1 du SGB VI, waírþ 2026 — talzeins þize gildis stike.',
+ 'f.P:rw.hint': 'Rentenwertbestimmungsverordnung 2026, fram 1.7.2026: 42,52 € (+4,24 dailos hunda).',
+ 'f.P:rv_an.hint': '18,6 dailos hunda, halba jah halba.',
+ 'f.P:av_an.hint': '2,6 dailos hunda, halba jah halba.',
+ 'f.P:kv_allg.hint': '§ 241 SGB V.',
+ 'f.P:kv_zus.hint': 'Kunþi þis BMG; ƕarjoh kara anþarleiko — ana-melei þeinaizos karos rathjo.',
+ 'f.P:pv_ges.hint': '§ 55 SGB XI. Barne gaminnein fram anþaramma barna ni frisahtida ist.',
+ 'f.P:pv_an.hint': 'In Sachsen anþarleiko (2,3 dailos hunda).',
+ 'f.P:pv_kl.hint': '§ 55 Abs. 3 SGB XI, ains us asneis.',
+ 'f.P:gfb.hint': '§ 32a Abs. 1 EStG bi Steuerfortentwicklungsgesetz.',
+ 'f.P:e2.hint': 'Marko gildis rathjo wahseiþ fram 14 du 23,97 dailom hunda.',
+ 'f.P:e3.hint': 'Marko gildis rathjo wahseiþ fram 23,97 du 42 dailom hunda.',
+ 'f.P:e4.hint': 'Fram 277.826 € galeikaiþ 45 dailos hunda.',
+ 'f.P:a2.hint': 'ESt = (a₂·y + b₂)·y, y = (zvE − grunduns freihals)/10.000.',
+ 'f.P:a3.hint': 'ESt = (a₃·z + b₃)·z + c₃, z = (zvE − 17.799)/10.000.',
+ 'f.P:c4.hint': 'ESt = 0,42·zvE − c₄.',
+ 'f.P:c5.hint': 'ESt = 0,45·zvE − c₅.',
+ 'f.P:soli.hint': 'SolzG 1995.',
+ 'f.P:soli_fg.hint': '2026, grunduns gild, bi þamma garaihtin ESt; at halbam twaifalþs. Jah qairrei marka.',
+ 'f.P:soli_mz.hint': '§ 3 Abs. 2a SolzG.',
+ 'f.P:an_pausch.hint': '§ 9a S. 1 Nr. 1a EStG.',
+ 'f.P:sa_pausch.hint': '§ 10c EStG.',
+ 'f.P:kapst.hint': '§ 32d Abs. 1 EStG.',
+ 'f.P:tfs.hint': '§ 20 Abs. 1 Nr. 3 miþ § 20 InvStG, dails aktjono ufar 50 dailom hunda.',
+ 'f.P:sparerpb.hint': '§ 20 Abs. 9 EStG; at halbam twaifalþs. Frajiuhiþ mikila dail þizos Vorabpauschale — saíƕ waírþis urrunsa.',
+ 'f.P:basiszins.hint': 'BMF-boka fram 13.01.2026, § 18 Abs. 4 InvStG (2025: 2,53 dailos hunda). Gasatjan du 0 qiþiþ: ni waihts Vorabpauschale.',
+ 'f.P:vp_faktor.hint': '§ 18 Abs. 1 S. 1 InvStG.',
+ 'f.P:st_frei_q.hint': '8 dailos hunda BBG-RV = 8.112 € in 2026.',
+ 'f.P:sv_frei_q.hint': '§ 1 Abs. 1 S. 1 Nr. 9 SvEV; 4 dailos hunda = 4.056 € in 2026. Samana so marka þis witodis waldufnjis bi § 1a BetrAVG.',
+ 'f.P:zul_g1.hint': 'Altersvorsorgereformgesetz, waldands fram Maja 2026, brukjan fram 1.1.2027.',
+ 'f.P:zul_s1.hint': 'Und 360 € eigin gibands: 50 skatte bi €.',
+ 'f.P:zul_g2.hint': 'Fram 361 und 1.800 €: 25 skatte bi €.',
+ 'f.P:zul_s2.hint': 'Maists gibans eiginis gibandis; gataujiþ maist grunduns giba 540 €.',
+ 'f.P:kind_zul.hint': '1 € bi ƕarjamme € gibanamma, und 300 € bi barna.',
+ 'f.P:av_max.hint': 'BMF-fraihn bi niujein þizos gibanodons seinons kararis, 05.05.2026. Þata ufaro rinniþ in anþaramma wiga, sa ist gildiþs swaswe sein faihu.',
+ 'f.P:av_sa_max.hint': 'ANAHAHA ÞIS FRISAHTIS, trauains hugs 70 dailos hunda. Eigin gibands und 1.800 € jah gibos. Þata aina rathjo stojiþ, jabai barn þata waírþ þis AV-faihus ushafjiþ aiþþau gadrausjiþ.',
+ 'f.P:ertragsq.hint': '§ 22 Nr. 1 S. 3 Buchst. a Doppelbuchst. bb EStG, du unigibanaim gildis dailam.',
+ 'f.P:halb.hint': '§ 20 Abs. 1 Nr. 6 S. 2 EStG galeiko (triggwa ufar 12 jera, giba afar 62): halbs missadails. Trauains hugs 80 dailos hunda.',
+
+ /* ---------------- Alla waurda, fotus, taikneis ---------------- */
+ 'app.meta': 'Waurstwis aldiskara, Altersvorsorgedepot jah sein ETF-faihu galeikan bi samin hrainjamma wilwa. Witodis stojan 2026.',
+ 'hdr.sub': 'Waurstwis aldiskara, Altersvorsorgedepot jah sein ETF-faihu &mdash; bi <b>samin hrainjamma wilwa</b> jah samin ETF. Witodis stojan 2026.',
+ 'input.sub': 'Þos rathjons sunsaiw niujaizos wairþand at ƕarjammeh inmaidein. Miþ <span class="qm" style="cursor:default">?</span> ƕarjizuh staþs sik silban gaskeireiþ.',
+ 'extra.sub': 'All her habaiþ goda faurgasateina. Ni tekan, niba þuk gadob.',
+ 'calc.sub': 'Allaim izei wiljand þamma wiga afargaggan.',
+ 'share.sub': 'Þeina waurda sind ains in þamma waurstwa (<kbd>localStorage</kbd>). Ni waiht wairþiþ sandiþ, nist waldufni ni spaikulatjands.',
+ 'footer.1': '<b>Ni ist gildis aiþþau faihu ragineins.</b> Frisahts nist triggwa. Witodis stojan 2026 bi niujein seina kararis in managam staþam ni ist andjis skeirjada; þo anahahona miþ minnistin trauainshugja standand undar „Wiga þizos rathjons → Swinþein þizo anahahano“ jah mahtjand jainar wandjan.',
+ 'footer.2': 'Sa rathjons kern ains du ainamma ustauhans us Excel-frisahtja <span class="pill">bAV-DYNO_vs_Altersvorsorgedepot_vs_ETF.xlsx</span> jah wiþra þrins fraisteinins bi asanjis raihtein gakannids (maists galeiks missaleikeins 1,3·10<sup>&minus;14</sup>).',
+ 'metric.monat.desc': 'Samaleiks menoþis giba all gibos mel miþ þamma samin waírþa, bi himma daga waírþa. Þata aina rathjo, þatei mag galeikan miþ þeinamma hrainjamma faihau nu.',
+ 'metric.ertrag.desc': 'Þatei sa wilja bi himma daga waírþa ufar eiginana anafilh gataujiþ: waírþ nu allaizo hrainjaizo gibo inuh waírþ nu þis hrainis wilwis.',
+ 'metric.irr.desc': 'Wokrs ana þamma sunjeino galagidin hrainjamma faihau, bi namin. Galeiks miþ þamma gasatidin allamma wokra þis ETF — so missaleikeins ist bi sunjai þatei giba jah gibandeis samana kostjand aiþþau giband.',
+ 'metric.kapital.desc': 'Faur gild jah faur gibandeis, bi namin. Ana willja NI ist so anahaha rathjo: bAV managizo her faurþis ist, akei fraliusiþ in gibai.',
+ 'ui.couple': '<span>⇅</span> Twa saíƕa ana þata samo mikilein. Wandei aina, so anþara laisteiþ.',
+ 'ui.legalNote': 'Witodis mikileins miþ bokos staþa. Ains wandei, jabai witoþ wandiþ ist aiþþau þeina kara anþarleiko ist.',
+
+ /* ---------------- Bi haha gameleinos at þaim raidjam ---------------- */
+ 'n.beitrag.ueber8': function(p, f){
+ return 'Ufar 8 dailom hunda þizos markos gibandins RV (' + f.eur(p.v8) + ' bi jera). So dails '
+ + 'ufaro ni gildis ni gibandeis batizei ist — galeiþiþ in siukeinai gawi jah jainar niman '
+ + 'skula siukeikarai ains.'; },
+ 'n.beitrag.ueber4': function(p, f){
+ return 'Ufar 4 dailom hunda þizos markos gibandins RV (' + f.eur(p.v4) + ' bi jera). Und her '
+ + 'habais witodis waldufni bi § 1a BetrAVG, ufaro þarft wiljan þis mizdogibandins.'; },
+ 'n.agzus.gedeckelt': function(p, f){
+ return 'Markiþ at ' + f.pct(p.quote, 1) + '. Sa mizdogibands sunjeino ganohjiþ ains '
+ + f.eur2(p.ersparnis) + ' bi jera — hauhizo waírþa her ni waihts wandjand, und þatei sa '
+ + 'haidus „bi sunjai rathiþ“ standiþ.'; },
+ 'n.agz_fix.fliesstNicht': function(p, f){
+ return 'Ni rinniþ: þeins menoþis gibands ' + f.eur2(p.beitrag) + ' undaro þizai minnistin '
+ + 'markai ' + f.eur2(p.schwelle) + ' ist (staþs undar „Anþaraim waurdam“).'; },
+ 'n.agz_fix.ueber4': function(p, f){
+ return 'Sa gasatiþa anaaukans ains ufariddja þana 4-%-kas (' + f.eur(p.topf)
+ + ' bi jera) bi ' + f.eur(p.ueber) + '. So dails at þus wesi gibandeins mizdo — sa frisahts '
+ + 'ni rathjiþ þo anaaukanon kaurein jah þau bAV þiuþeigo domeiþ.'; },
+ 'n.agz_fix.verdraengung': function(p, f){
+ return 'Gafulleiþ frumist þana 4-%-kas: fram þeinamma eiginamma gibandin aflifniþ ains '
+ + f.eur(p.rest) + ' gibandeis freis. Þeina hraina wilwa þau wahseiþ — sa anaaukans swe-þeh '
+ + 'gibans faihu ist, ains wandeiþ marka þeinaizos eiginons.'; },
+ 'n.agz_fix.ueber8': 'Samana miþ þamma eiginin gibandin ufar 8 dailom hunda BBG-RV — þata ufarist ni gildis ni gibandeis batizei ist.',
+ 'n.agz_fix_min.knapp': function(p, f){
+ return 'Þu ist ains ' + f.eur2(p.d) + ' ufar markai. Undaro fraliusiþ sa gasatiþa anaaukans '
+ + 'allata: wokrs þis spedistins gibandins € ist her unandeis, gabundi all ↔ hrains jainar '
+ + 'unstands.'; },
+ 'n.agz_fix_min.verfehlt': function(p, f){
+ return 'Marka ni gataihana — ' + f.eur2(p.fehlt) + ' maizo bi menoþ irsjand ' + f.eur2(p.zuschuss)
+ + ' anaaukan. Þata ist filaus sinteino sa batista € in allamma frisahtja.'; },
+ 'n.teilkap.kosten': function(p, f){
+ return 'Kostuli ' + (p.gewinn ? 'ni waiht, ak: ' + p.dtxt : p.dtxt + ' ' + p.unit)
+ + ' wiþra hlutr gildis gawaírþeins. Fairina: sa ains gibands in jera niman all gildis skula '
+ + 'ist (marko kaurei jainar ' + f.pct(p.grenz, 1) + ') jah afar þamma wokreiþ ains bi þamma '
+ + 'faihugildis rathjon, ni bi frisahtis akrana.'; },
+ 'n.av_auszform.horizont': function(p, f){
+ return 'Ufar þo gagaleikeinais marka gildiþ þata gild nauh ' + f.eur(p.rest)
+ + ', þoei her NI rathidos wairþand. Gasatiþa marka sinteino minneiþ ƕarjatoh gild all ald — '
+ + 'sa izei alds wairþiþ, jainar gawinniþ.'; },
+ 'rank.swap': function(p, f){
+ return '<b>Þos taikneis sik ni gaqiþand.</b> Bi menoþis gibai '
+ + p.a + ' faurþis ist wiþra ' + p.b + ', bi waírþa nu þis hrainis gawaurkis ist anþaraleiko. '
+ + 'Fairina: waírþ nu gadrauseiþ miþ wairþis wahstau (' + f.pct(p.infl, 2) + '), so menoþis '
+ + 'giba gildiþ miþ þamma aftra lagjandin wokra afar gilda (' + f.pct(p.wiederanl, 2) + '). '
+ + 'Swa filu þo twa distandand, swa batizo faur giban haubidafaihu standiþ. Ƕarja taikns '
+ + 'galeikaiþ, hangeiþ at þamma jabai þu wildeis lagjan aiþþau frawardjan — at „frawardjan“ '
+ + 'gasatei waírþ in staþa „Wilwa seinis ETF-faihaus“ swa þatei sa aftra lagjands wokrs du ni '
+ + 'waihtai galeiþiþ.'; },
+ 'warn.unreachable': 'So hraina wilwa ni mag gataihana wairþan — ufariddja þeina mizdon. Gasatiþ ist sa hauhista mahteiga waírþ.',
+ 'warn.inactive': 'In frumistin jera bi þeinaim waurdam ni þu leikis ïn waurstwa — nist mizdons inmaideins, þaruh ni hraina wilwa, du þizaiei alls gibands aftra rathiþs wairþan mahtedi. Saíƕ „Afleiþan af waurstwa“ jah „Alds himma daga“.',
+ 'verdict.lead': function(p){
+ return '<b>' + p.satz + '</b> faurþis ist miþ ' + p.wert + ' — ' + p.d2 + ' maizo þau ' + p.nom2
+ + (p.nom3 ? ' jah ' + p.d3 + ' maizo þau ' + p.nom3 : '') + '.'; },
+ 'verdict.top': function(p, f){
+ return ' Sa maista ains staþs in þamma mita ' + p.gen + ' wiþra sein ETF-faihu ist „' + p.label
+ + '“ — jah ' + (p.pro ? 'du batin' : 'du skaþa') + ' ' + p.gen
+ + ', miþ ' + f.eur(p.wert) + ' waírþa nu. Alla gadaila standiþ undar „Waírþis urrunsa“.'; },
+ 'verdict.band': function(p, f){
+ return '<span class="band">Ƕan swinþ ist þata? At allamma wokra ' + f.pct(p.lo, 1)
+ + ' und staþ ' + f.pct(p.mid, 1) + ' wesi þata ' + p.vlo + ', at ' + f.pct(p.hi, 1) + ' wesi '
+ + p.vhi + ' — sa urruns '
+ + (p.stabil ? 'in þamma miton samalaus standiþ.'
+ : '<b>in þamma miton anþaraleiko wandeiþ</b>, þata urruns her ni bairiþ.')
+ + '</span>'; },
+ 'demo.text': '<b>Þata nauh frisahtis waírþa sind</b> — 40 jera alds, 75.000 € jeris all mizdo, 300 € mizdons inmaideins bi menoþ, bi witoda siukeins. Ana-melei undar „Þeinaim waurdam“ þo þeina eigina; þata gamunan þau silbo galeiþiþ.',
+ 'sens.readout': 'Gamaitan: þeins nu waírþ. Hringa: mitands staþeis miþ þamma seinamma faihau. Ufar þamma wiga fara aiþþau tekan du waírþam.',
+ 'sens.note': function(p){
+ return 'Sa spedists wagida raidjan rathiþs wairþiþ all þairh sein mit — ' + p.n
+ + ' fulla frisahtis rinneina. Nu: „' + p.label + '“. '
+ + 'Wagei anþarana raidjan, jah sa wigs wandeiþ miþ.'; },
+ 'sens.noteNetto': function(p, f){
+ return ' Saíƕ: sa raidja jah þo hrainjon wilwa wandeiþ (her ' + f.eur2(p.lo) + ' und '
+ + f.eur2(p.hi) + ' bi menoþ) jah swa þata waírþ, þatei in allaim þrim wiljom lagjada. Þaruh '
+ + 'þos þrijos kurvos at ƕarjammeh x garaihto galeikan magun, akei so hauheins miþ anþaraim x '
+ + 'ni. Þos wraikwitha sind at markom gibandins (' + f.eur(p.bbgkv) + ' du KV/PV, '
+ + f.eur(p.bbgrv) + ' du RV/AV) jah at gildis markom.'; },
+ 'wf.check': function(p, f){
+ return 'Fraisteins: ' + f.eur(p.start) + ' + ' + f.eur(p.summe) + ' = ' + f.eur(p.start + p.summe)
+ + ' (skuldedi ' + f.eur(p.ende) + ' wisan, missaleikeins ' + f.nf2(p.start + p.summe - p.ende) + ' €).'; },
+ 'wf.note': 'Gadails all fram andjin, þaruh garaihto ustauhana — akei ist <b>gataujis raihtjis</b>: þos maht ni magun distekan wairþan, ƕarjatoh stikls mitiþ dail <i>gadob</i> þaim ufaro standandam. Tek stikl du gaskeireinai.',
+ 'wfb.vp.note': 'Nih bAV nih Altersvorsorgedepot Vorabpauschale (§ 18 InvStG) kunnun. Mitiþ swe sein faihu inuh Vorabpauschale inuh miþ. Sa stikls mag gadraus wisan: so Vorabpauschale filu galeiþiþ in bairgandins afmaitan, akei ushaufiþ all þana kostuli grundu — jah þau ist sa seinamma faihau hlutr batizei.',
+ 'wfb.zul.note': 'Framaþi faihu bi niujamma gibos frisahtja jah afmaitans bi § 10a EStG. Mitiþ miþ afwandjan bajoþe wige.',
+ 'wfb.arch.note': 'Gildis missadails t₀ − t₁ jah all anþar. Þata aflifnando garaihtiþ, þatei so keþja garaihto gaggai.',
+ 'wfb.agz.note': 'Framaþi faihu — sa ainata gatimreinis batizei þizos bAV, saei ni us gildis witoda qimiþ. Mitiþ miþ afwandjan þana anaaukan.',
+ 'wfb.tarif.note': 'Marko gildis rathjo at gibandin inuh at niman, jah all anþar. Þata aflifnando garaihtiþ, þatei so keþja garaihto gaggai. Gildis gaaukeins ains ni waiht ist: (1−t)(1+r)ⁿ = (1+r)ⁿ(1−t), managfaldeins wandeiþ ni þata waírþ.',
+ 'wfb.kvpv.note': '§§ 229, 250 SGB V: alla gibandeins rathjo sa gildis niutands ains bairiþ. Mitiþ swe missaleikeins wiþra gasateins „seina siukei in aldin“.',
+ 'wfb.ep.note': 'Mizdons inmaideins minneiþ þata gibandeins mizdo jah swa gild bi witoda. Hrains rathiþs.',
+ 'kap.readout': function(p, f){
+ return 'At gildis anastodeinai gabundans: bAV ' + f.eur(p.bavGeb) + ' us ' + f.eur(p.bav)
+ + ' · AV-faihu ' + f.eur(p.avGeb) + ' us ' + f.eur(p.av)
+ + ' · sein faihu ' + f.eur(0) + ' us ' + f.eur(p.priv)
+ + '. So galeika menoþis giba niman wairþiþ, þaruh ƕarjatoh wilja at ni waihtai andjiþ.'; },
+ 'kap.note': function(p, f){
+ return 'Faihus standa in frisahtja, in gibos melam anaaukan miþ hrainjaba aftra lagidaim '
+ + 'gibom (' + f.pct(p.wiederanl, 2) + ' afar gilda) jah inuh so galeika menoþis giba, '
+ + 'sunjeino niman. Þaruh ƕarjatoh wilja garaihto at ni waihtai rinniþ. Unte þata niman ains '
+ + 'us aftra lagjan galeiþiþ jah þata frisahtis haubidafaihu in frisahtja aflifniþ, þarei miþ '
+ + 'frisahtis akrana faur gild wahseiþ, þos kurvos swe-þeh ni galeiko rinnand. '
+ + '— So gamaitana raihta ist so freis brukjanda dails: bAV und gildis anastodein all '
+ + 'gabundana ist (§ 1b BetrAVG kann unfralusan waldufni, ni freihals), at Altersvorsorgedepot '
+ + 'niman faur 65 jera skaþuli ist jah freis ains þata ufarist ufar jeris maistin waírþa, sein '
+ + 'faihu ist sinteino freis. Þata ist sa ainata wigs, þarei haubidafaihaus giba goda '
+ + 'ïnsaihiþ. '
+ + (p.verrentet ? 'Unte þu þata faihu gildis, jainar jah þata haubidafaihu du þamma gibandin '
+ + 'galeiþiþ — so kurva bi þamma gadrauseiþ, þauhjabai ni waiht fralusans ist. ' : '')
+ + 'Jah aftra swikunþaba: þos kurvos ataugjand þata aigin us ÞAMMA AINAMMA anahaha, ni all '
+ + 'þeinata aigin.'; },
+ 'zer.readout': 'All swe samaleiks menoþis giba bi himma daga waírþa. Unte gildan raihts ist, þos dailos garaihto samaþ rathjand.',
+ 'zer.note': function(p, f){
+ return 'Sa mel ist samalaus in allaim þrim wiljom. Ains gibands haubidafaihaus ni gadailiþs '
+ + 'wairþiþ in twalibim, ak miþ þamma aftra lagjandin wokra afar gilda (' + f.pct(p.wiederanl, 2)
+ + ' bi jera) in þamma samin mela gildiþs. Saei þata faihu frawardeiþ ïn staþ lagjan, standiþ '
+ + 'wairsizo.'; },
+ 'det.warn.lead': 'Þu standis utana þis gibanodins wigis: ',
+ 'det.warn.aussch': 'Ufar 100 dailom hunda brukeinais nist witodis waldufni du mizdons inmaideinai. ',
+ 'det.warn.ngef': 'Mikila dails þize gibande ni gildis ni gibandeis batizei ist — so dails galeiþiþ in siukeinai gawi, inuh ni waiht niman utan siukeikarai ains. ',
+ 'det.warn.vb': 'Þata Versorgungsbezug ufariddja þana freihals swikunþaba; so gaskeirmeins þis alla freihalsis gadrauseiþ swe 1/haubidafaihu. ',
+ 'det.ann.intro': 'Sa urruns hangeiþ at witodis fraihnam, þoei 2026 nauh ni allos andilausidos sind. Þos rathjons in klammom sind eigin trauainshugjos.',
+ 'det.ann.notmodelled': '<b>Ni frisahtida:</b> minneins at faura-aldis gilda, waihts mizdons inmaideinais ana siukeins-, arbaidalausis- jah barne-mizdon, afar-libandane kara, unmahteins gatrauains (PSVaG), gaggan miþ anþaramma mizdogibandin, barne gaminnein in kararja, þiuþeigo fraisteins bi § 32d Abs. 6 EStG, andanahtjis jah grunduns gatrauainis gaskeirmeins, laggis libainis sleiþei ufar marka.',
+ 'det.prinzip': '<p>Galeikan <i>allaize gibande</i> ni wesi garaiht: mizdons inmaideins us þamma allin qimiþ, sein bairgan us þamma hrainjin. Þaruh so <b>hraina wilwa</b> galeikaida wairþiþ:</p>'
+ + '<p style="font-family:var(--mono);font-size:.82rem;background:var(--chip);padding:9px 11px;border-radius:9px">Hraina wilwa = Alls gibands − mizdons gildis sparein − asneis dails gibandins</p>'
+ + '<p>Þata samo waírþ in allaim þrim wiljom lagjada. Þata aflifnando ist galeikeins gibandane gatimreine, ni gibandis hauheine.</p>'
+ + '<p><b>Gildis ufarsateins ains ni waiht ist:</b> (1−t)·(1+r)ⁿ = (1+r)ⁿ·(1−t). Managfaldeins wandeiþ. Aflifnand ains fidwor waírþis urrunsa:</p>'
+ + '<ol style="padding-left:1.2em;margin:.3em 0"><li>Gildis missadails t₀ − t₁</li>'
+ + '<li>Framaþi faihu — anaaukans þis mizdogibandins aiþþau gibos</li>'
+ + '<li>gildis freis gahaldeins — ni waihts Vorabpauschale</li>'
+ + '<li>niuja gibandeis, þoei ainana wiljan tekand — siukei/kara ana Versorgungsbezüge</li></ol>'
+ + '<p>Staþs 4 ist sa mahteiga skaþa þizos bAV, staþs 2 ains gatimreinis batizei. Sa wokrs þizos bAV <b>garaihto sinteino gadrauseiþ miþ gibandins hauhein</b>, unte sa freihals all ist jah so gaskeirmeins gadrauseiþ swe 1/K — nist innana batisto.</p>'
+ + '<p>At faurgasatidai hrainjai wilwai wairþiþ sa alls gibands miþ garaihtein aftra rathiþs: N(B) ist sinteino jah garaihto wahseiþ (dN/dB = 1 − marko gibandeis rathjo − marko gildis rathjo > 0), akei bi wraikwiþam at 4 jah 8 dailom hunda BBG-RV, at markom gibandins jah gildis markom ni mag andjis aftra rathiþs wairþan. 34 garaihteinos giband minniz þau tainja dails skattis.</p>',
+ 'det.s.erg': 'Allai þrijai wiljans in bairgandein garaihto samon waírþ us þamma hrainjin kostuljand.',
+ 'det.s.mon': 'Allai wiljans bi samin mela gildidai, bi himma daga waírþa. Unte gildan raihts ist, þos raihtjos garaihto samaþ rathjand.',
+ 'det.s.diag': 'Ƕi þata ist — jah ƕar þu standis utana þis gibanodins wigis.',
+ 'msg.linkCopied': 'Gabinda afmeljada. Saei þo uslukiþ, saíƕiþ garaihto þos rathjons — ni waiht þairh waldufni gaggiþ.',
+ 'msg.linkFailed': 'Afmeljan ni mahta. So gabinda nu in bokos staþa standiþ.',
+ 'pwa.offline': '<b>Freis wisan mag inuh gabindan.</b> Þata waurstw nu in waldufnjis gahaldein ligiþ jah rinniþ jah inuh gatekan. Du gasatjan: at iPhone „Gadailjan“ → „Du frumistin skildu“, at Android þata anahaha → „Waurstw gasatjan“.',
+ 'pwa.installAsk': '<b>Swe waurstw gasatjan?</b> Þan ligiþ miþ eiginamma taikna ana frumistin skildau jah rinniþ inuh gatekan. ',
+ 'pwa.declined': 'Waila — þata waurstw rinniþ jah swa, jah inuh gatekan.',
+ 'pwa.file': '<b>Þu þo boka silba uslukt</b> (<kbd>file://</kbd>). All rathjada, all gahaldada. Ains twa waurstwis kunþeis aljand: ni taikn ana frumistin skildau jah ni gahaldein inuh gatekan — þatuh her ni þaurfts wesi, so boka ju ligiþ ana þamma kasa. Du fullamma waurstwis frisahtja lagei þana gafaurds ana ƕoh HTTPS-stad jah þaþro uslukei.'
+};
diff --git a/app/i18n.grc.js b/app/i18n.grc.js
new file mode 100644
index 0000000..275a51a
--- /dev/null
+++ b/app/i18n.grc.js
@@ -0,0 +1,612 @@
+/* =====================================================================
+ ΛΕΞΙΚΟΝ ΕΛΛΗΝΙΚΟΝ ΑΡΧΑΙΟΝ (πολυτονικόν) — ΠΛΗΡΕΣ (459 κλειδία).
+ Seit der zweiten Fassung auch die langen Erläuterungstexte übersetzt.
+ Attische Prosa erlaubt echte Periodenbildung (μέν/δέ, ἐάν + Konjunktiv,
+ ὥστε + Infinitiv, Partizipialkonstruktionen), so dass die neuen
+ Passagen näher an klassischer Rechts- und Finanzprosa (Demosthenes'
+ Reden über Symmorien und Trierarchien) bleiben als in den drei
+ germanischen Sprachstufen. Vertrauensgrad in Syntax und Kasus der
+ neuen Fließtextpassagen etwa 45 %, in die wiederverwendeten und neu
+ geprägten Fachwörter weiterhin die dokumentierten 60 % — Optativ wird
+ durchweg vermieden (Fehlerquelle), Konjunktiv/Indikativ bevorzugt.
+
+ Neu geprägt bzw. auf klassischer Grundlage übertragen:
+ δικαίωμα Rechtsanspruch (belegt, nachklassisch/hellenistisch
+ als Rechtsterminus, hier auf § 1a BetrAVG übertragen)
+ ὅρος εἰσφορᾶς Beitragsbemessungsgrenze (aus der Kernliste)
+ ἀτέλεια Freibetrag/Freigrenze (belegt: att. Steuerbefreiung)
+ κοινωνός Ehe-/Lebenspartner (aus der Kernliste)
+ συγκατάθεσις Zustimmung (belegt, klassischer Terminus)
+ ἀσφάλισις κοινωνική gesetzliche Sozialversicherung (aus der Kernliste)
+ Mathematische Formeln (N(B) = …, (1−t)(1+r)ⁿ) bleiben als Symbole
+ stehen, wie im Original.
+
+ ZUR WORTWAHL. Attische Prosa, polytonisch, Iota subscriptum. Wo ein
+ klassischer terminus technicus existiert, wird er benutzt — und zwar
+ deshalb, weil die athenische Finanzsprache erstaunlich viel abdeckt:
+ κεφάλαιον Kapital, Hauptsumme (belegt, Demosth. u. ö.)
+ τόκος Zins (belegt)
+ σύνταξις feste Zuwendung, Rente (belegt: Theorikon, Papyri)
+ εἰσφορά Beitrag, Vermögensabgabe (belegt)
+ καθαρός netto (belegt: καθαρὸν λῆμμα, Reingewinn)
+ μισθός Lohn; μισθωτός Arbeitnehmer; μισθοδότης Arbeitgeber
+ τοῖς ἑκατόν Prozent (belegte Zinsformel)
+ ταμιεῖον Kasse, Depot (belegt, hier übertragen)
+ Nicht belegt und daher NEUGEPRÄGT — auf klassischen Stämmen, aber ohne
+ antike Autorität; Vertrauensgrad in die Idiomatik etwa 60 %:
+ πληθωρισμός Inflation (Stamm πληθώρα)
+ ἀσφάλισις Versicherung (Stamm ἀσφαλής)
+ ΕΤΦ / ETF bleibt als Fremdabkürzung stehen
+ Die Gesetzesfundstellen bleiben deutsch: es gibt sie amtlich nur so.
+ ===================================================================== */
+window.I18N_GRC = {
+ 'f.I:gehalt.label': 'Μισθὸς ἐτήσιος ὅλος νῦν',
+ 'f.I:beitrag.label': 'Εἰσφορὰ μηνιαία bAV, ὅλη',
+ 'f.I:netto_ziel.label': 'Δαπάνη μηνιαία καθαρά',
+ 'f.I:agzus.label': 'Προσθήκη τοῦ μισθοδότου',
+ 'f.I:agz_fix.label': 'Προσθήκη ὡρισμένη ἐπιπλέον',
+ 'f.I:agz_fix_dyn.label': 'Τὴν ὡρισμένην προσθήκην αὔξειν',
+ 'f.I:agz_fix_dyn.o0': 'κατ᾽ ὄνομα ἀμετάβλητος',
+ 'f.I:agz_fix_dyn.o1': 'σὺν τῷ μισθῷ',
+ 'f.I:agzus_sv.label': 'Τρόπος τῆς προσθήκης',
+ 'f.I:agzus_sv.o0': 'ἡ ὅλη εἰσφορά',
+ 'f.I:agzus_sv.o1': 'τὸ ἀτελὲς μέρος μόνον',
+ 'f.I:agzus_sv.o2': 'κατ᾽ ἀκρίβειαν',
+ 'f.I:dyn.label': 'Τὴν εἰσφορὰν αὔξειν',
+ 'f.I:dyn.o1': 'σὺν τῷ μισθῷ',
+ 'f.I:dyn.o0': 'κατ᾽ ὄνομα ἀμετάβλητος',
+ 'f.I:rendite.label': 'Πρόσοδος ὅλη τοῦ ETF κατ᾽ ἔτος',
+ 'f.I:alter.label': 'Ἡλικία νῦν',
+ 'f.I:alter.unit': 'ἔτη',
+ 'f.I:rentbeg.label': 'Ἀρχὴ τῆς ἀποδόσεως',
+ 'f.I:rentbeg.unit': 'ἔτη',
+ 'f.I:kv_ruhe.label': 'Ἀσφάλισις νόσου ἐν τῷ γήρᾳ',
+ 'f.I:kv_ruhe.o1': 'κατὰ νόμον',
+ 'f.I:kv_ruhe.o2': 'ἰδιωτική',
+ 'f.I:auszform.label': 'Ἀπόδοσις τῆς bAV',
+ 'f.I:auszform.o1': 'κεφάλαιον',
+ 'f.I:auszform.o2': 'σύνταξις διὰ βίου',
+ 'f.I:teilkap.label': 'Altersvorsorgedepot: κεφάλαιον ἐν ἀρχῇ ἅπαξ',
+ 'f.I:av_auszform.label': 'Altersvorsorgedepot: τὸ λοιπόν',
+ 'f.I:av_auszform.o1': 'τάξις ἀποδόσεως',
+ 'f.I:av_auszform.o2': 'σύνταξις διὰ βίου',
+ 'f.I:agz_fix_min.label': 'Εἰσφορὰ ἰδία ἐλαχίστη πρὸς τὴν ὡρισμένην προσθήκην',
+ 'f.I:rentfak_av.label': 'Λόγος συντάξεως τοῦ Altersvorsorgedepot',
+ 'f.I:rentfak_av.unit': '€ κατὰ 10.000 €',
+ 'f.I:rentdyn_av.label': 'Αὔξησις τῆς τοῦ ταμιείου συντάξεως κατ᾽ ἔτος',
+ 'f.I:rentfak.label': 'Λόγος συντάξεως τῆς bAV',
+ 'f.I:rentfak.unit': '€ κατὰ 10.000 €',
+ 'f.I:rentdyn.label': 'Αὔξησις τῆς bAV-συντάξεως κατ᾽ ἔτος',
+ 'f.I:fuenftel.label': 'Τὸν τοῦ πέμπτου νόμον σκοπεῖν',
+ 'f.I:fuenftel.o0': 'οὔ (ἀσφαλῶς)',
+ 'f.I:fuenftel.o1': 'ναί',
+ 'f.I:planende.label': 'Ὅρος τῆς συγκρίσεως μέχρι ἡλικίας',
+ 'f.I:planende.unit': 'ἔτη',
+ 'f.I:ausscheid.label': 'Ἀπαλλαγὴ τοῦ ἔργου',
+ 'f.I:ausscheid.unit': 'ἔτη',
+ 'f.I:tzalter.label': 'Ἐργασία μερικὴ ἀπὸ ἡλικίας',
+ 'f.I:tzalter.unit': 'ἔτη',
+ 'f.I:tzfaktor.label': 'Λόγος τῆς μερικῆς ἐργασίας',
+ 'f.I:gsteig.label': 'Αὔξησις τοῦ μισθοῦ κατ᾽ ἔτος',
+ 'f.I:stkl.label': 'Τρόπος τοῦ τιμήματος',
+ 'f.I:stkl.o1': 'χωρίς',
+ 'f.I:stkl.o3': 'κοινῇ (διαιρέσει)',
+ 'f.I:partner.label': 'πρόσοδος φορολογητέα τοῦ κοινωνοῦ',
+ 'f.I:kist.label': 'Λόγος τοῦ ἱεροῦ φόρου',
+ 'f.I:tarifanp.label': 'Μετάθεσις τῶν ὅρων τοῦ φόρου κατ᾽ ἔτος',
+ 'f.I:kinder.label': 'Ἀριθμὸς τῶν τέκνων',
+ 'f.I:kind_jahre.label': 'Ἔτη μετὰ τῆς τέκνων δωρεᾶς',
+ 'f.I:kind_jahre.unit': 'ἔτη',
+ 'f.I:kinderlos.label': 'Ἄτεκνος (προσθήκη θεραπείας)',
+ 'f.I:kinderlos.o0': 'οὔ',
+ 'f.I:kinderlos.o1': 'ναί',
+ 'f.I:k_bav.label': 'Δαπάναι τοῦ bAV κατ᾽ ἔτος',
+ 'f.I:k_av.label': 'Δαπάναι τοῦ Altersvorsorgedepot κατ᾽ ἔτος',
+ 'f.I:k_priv.label': 'Δαπάναι τοῦ ἰδίου ETF-ταμιείου κατ᾽ ἔτος',
+ 'f.I:infl.label': 'Πληθωρισμὸς κατ᾽ ἔτος',
+ 'f.I:sonst_zve.label': 'ἄλλη πρόσοδος φορολογητέα ἐν τῷ γήρᾳ',
+ 'f.I:rente_br.label': 'σύνταξις κατὰ νόμον ὅλη κατ᾽ ἔτος',
+ 'f.P:bbg_rv.label': 'Ὅρος εἰσφορᾶς τῆς συντάξεως (ἐτήσιος)',
+ 'f.P:bbg_kv.label': 'Ὅρος εἰσφορᾶς νόσου καὶ θεραπείας',
+ 'f.P:bezug.label': 'Bezugsgröße (μηνιαία)',
+ 'f.P:de_rv.label': 'Μισθὸς μέσος (RV)',
+ 'f.P:rw.label': 'Ἀξία τοῦ σημείου συντάξεως νῦν',
+ 'f.P:rw.unit': '€',
+ 'f.P:rv_an.label': 'Εἰσφορὰ συντάξεως, μέρος τοῦ μισθωτοῦ',
+ 'f.P:av_an.label': 'Εἰσφορὰ ἀεργίας, μέρος τοῦ μισθωτοῦ',
+ 'f.P:kv_allg.label': 'Λόγος εἰσφορᾶς νόσου ὁ κοινός',
+ 'f.P:kv_zus.label': 'Εἰσφορὰ νόσου ἐπιπρόσθετος μέση',
+ 'f.P:pv_ges.label': 'Λόγος εἰσφορᾶς θεραπείας ὁ ὅλος',
+ 'f.P:pv_an.label': 'Θεραπεία, μέρος τοῦ μισθωτοῦ',
+ 'f.P:pv_kl.label': 'Θεραπεία, προσθήκη τῶν ἀτέκνων',
+ 'f.P:gfb.label': 'Ἀτέλεια βασική (τέλος ζώνης α΄)',
+ 'f.P:e2.label': 'Τέλος ζώνης β΄',
+ 'f.P:e3.label': 'Τέλος ζώνης γ΄',
+ 'f.P:e4.label': 'Ἀρχὴ ζώνης ε΄ (ὁ τῶν πλουσίων φόρος)',
+ 'f.P:a2.label': 'Συντελεστὴς a₂',
+ 'f.P:b2.label': 'Συντελεστὴς b₂',
+ 'f.P:a3.label': 'Συντελεστὴς a₃',
+ 'f.P:b3.label': 'Συντελεστὴς b₃',
+ 'f.P:c3.label': 'Σταθερὰ c₃',
+ 'f.P:c4.label': 'Σταθερὰ c₄',
+ 'f.P:c5.label': 'Σταθερὰ c₅',
+ 'f.P:soli.label': 'Προσθήκη κοινωνίας',
+ 'f.P:soli_fg.label': 'Ὅρος ἀτελείας τῆς προσθήκης',
+ 'f.P:soli_mz.label': 'Ζώνη μετριασμοῦ, βάρος ἔσχατον',
+ 'f.P:an_pausch.label': 'Ἀφαίρεσις τῶν μισθωτῶν ἡ ὡρισμένη',
+ 'f.P:sa_pausch.label': 'Ἀφαίρεσις τῶν ἰδίων δαπανῶν ἡ ὡρισμένη',
+ 'f.P:kapst.label': 'Λόγος τοῦ φόρου κεφαλαίου',
+ 'f.P:tfs.label': 'Ἀτέλεια μερικὴ τῶν μετοχικῶν ταμιείων',
+ 'f.P:sparerpb.label': 'Ἀφαίρεσις τοῦ ταμιεύοντος ἡ ὡρισμένη',
+ 'f.P:basiszins.label': 'Τόκος βασικὸς τῆς Vorabpauschale',
+ 'f.P:vp_faktor.label': 'Λόγος τῆς βασικῆς προσόδου',
+ 'f.P:st_frei_q.label': 'ἀτελὲς § 3 Nr. 63 (μέρος τοῦ BBG-RV)',
+ 'f.P:sv_frei_q.label': 'ἀνείσφορον (μέρος τοῦ BBG-RV)',
+ 'f.P:zul_g1.label': 'Δωρεά, βαθμὸς α΄ (καθ᾽ ἕκαστον € ἰδίας εἰσφορᾶς)',
+ 'f.P:zul_s1.label': 'Ὅρος βαθμοῦ α΄',
+ 'f.P:zul_g2.label': 'Δωρεά, βαθμὸς β΄ (καθ᾽ ἕκαστον € ἰδίας εἰσφορᾶς)',
+ 'f.P:zul_s2.label': 'Ὅρος βαθμοῦ β΄',
+ 'f.P:kind_zul.label': 'Δωρεὰ καθ᾽ ἕκαστον τέκνον',
+ 'f.P:av_max.label': 'Εἰσφορὰ μεγίστη κατ᾽ ἔτος',
+ 'f.P:av_sa_max.label': 'Ἀφαίρεσις μεγίστη κατὰ § 10a',
+ 'f.P:ertragsq.label': 'Μέρος τῆς προσόδου (ἡλικία 67)',
+ 'f.P:halb.label': 'μέρος φορολογητὸν τῆς διαφορᾶς',
+
+ /* ---------------- Πλαίσιον, ἐπιγραφαὶ θυρίδων ---------------- */
+ 'app.title': 'Σύγκρισις γηροτροφίας',
+ 'hdr.title': 'Σύγκρισις γηροτροφίας',
+ 'win.header': 'Σύγκρισις γηροτροφίας',
+ 'win.result': 'Ἀποτέλεσμα',
+ 'win.input': 'Τὰ σὰ δεδομένα',
+ 'win.chart': 'Διαγράμματα',
+ 'win.extra': 'Ἕτερα δεδομένα',
+ 'win.calc': 'Ὁδὸς τοῦ λογισμοῦ',
+ 'win.share': 'Σῴζειν καὶ μεταδιδόναι',
+ 'win.min': 'Συστέλλειν',
+ 'win.restore': 'Ἀποκαθιστάναι',
+ 'win.n': function(p){ return 'Θυρὶς ' + p.n; },
+ 'ui.share': 'Ἀντιγράφειν σύνδεσμον σὺν τοῖς ἐμοῖς ἀριθμοῖς',
+ 'ui.export': 'Σῴζειν ὡς ἀρχεῖον',
+ 'ui.import': 'Ἀρχεῖον εἰσάγειν',
+ 'ui.reset': 'Πάντα ἀποκαθιστάναι',
+ 'ui.pin.set': 'Μνημονεύειν ὡς κανόνα',
+ 'ui.pin.clear': 'Τὸν κανόνα λύειν',
+ 'ui.lang': 'Γλῶττα',
+ 'ui.lang.aria': 'Γλῶτταν αἱρεῖσθαι',
+ 'ui.lang.partial': 'ἐκ μέρους μόνον ἡρμηνευμένη',
+ 'ui.lang.partialNote': 'Ἥδε ἡ γλῶττα <b>ἐκ μέρους ἡρμήνευται</b>: ἡ ὄψις, τὰ τῶν χωρῶν ὀνόματα, αἱ τῶν πινάκων ἐπιγραφαὶ καὶ αἱ τῶν διαγραμμάτων δηλώσεις πάρεισιν. Αἱ δὲ μακραὶ νομικαὶ ἐξηγήσεις — τὰ ὑπὸ τῷ <span class="qm" style="cursor:default">?</span> κείμενα, ἡ κρίσις καὶ ἡ τοῦ λογισμοῦ ὁδός — Γερμανιστὶ φαίνονται. Αἱ τῶν νόμων μαρτυρίαι (BetrAVG, EStG, SGB V) ἐν πάσῃ γλώττῃ Γερμανικαὶ μένουσιν: δημοσίᾳ γὰρ ἄλλως οὐκ εἰσίν.',
+ 'sb.up': 'Ἄνω πρὸς τὸ ἀποτέλεσμα',
+
+ /* ---------------- Αἱ τρεῖς αἱρέσεις ---------------- */
+ 'opt.bav.name': 'bAV (μισθοῦ μεταβολή)',
+ 'opt.bav.short': 'bAV',
+ 'opt.bav.nom': 'ἡ κατ᾽ ἐργαστήριον γηροτροφία',
+ 'opt.bav.satz': 'Ἡ κατ᾽ ἐργαστήριον γηροτροφία',
+ 'opt.bav.gen': 'τῆς bAV',
+ 'opt.av.name': 'Altersvorsorgedepot',
+ 'opt.av.short': 'AV-ταμιεῖον',
+ 'opt.av.nom': 'τὸ Altersvorsorgedepot',
+ 'opt.av.satz': 'Τὸ Altersvorsorgedepot',
+ 'opt.av.gen': 'τοῦ Altersvorsorgedepot',
+ 'opt.priv.name': 'ἴδιον ETF-ταμιεῖον',
+ 'opt.priv.short': 'ἴδιον',
+ 'opt.priv.nom': 'τὸ ἴδιον ETF-ταμιεῖον',
+ 'opt.priv.satz': 'Τὸ ἴδιον ETF-ταμιεῖον',
+ 'opt.priv.gen': 'τοῦ ἰδίου ETF-ταμιείου',
+
+ /* ---------------- Σημεῖα ---------------- */
+ 'metric.monat.label': 'Ἀπόδοσις μηνιαία',
+ 'metric.monat.unit': '€/μῆνα',
+ 'metric.ertrag.label': 'Κέρδος καθαρόν (ἀξία νῦν)',
+ 'metric.ertrag.unit': '€',
+ 'metric.irr.label': 'Τόκος ὁ ἐντός',
+ 'metric.irr.unit': '% κατ᾽ ἔτος',
+ 'metric.kapital.label': 'Κεφάλαιον ἐν ἀρχῇ τῆς συντάξεως',
+ 'metric.kapital.unit': '€',
+ 'metric.pa': ' κατ᾽ ἔτος',
+ 'metric.pp': ' μέρη τοῖς ἑκατόν',
+ 'metric.short.monat': 'Μήν',
+ 'metric.short.ertrag': 'Κέρδος',
+ 'metric.short.irr': 'IRR',
+ 'metric.short.kapital': 'Κεφάλαιον',
+
+ /* ---------------- Χῶραι δεδομένων ---------------- */
+ 'unit.pct': '%',
+ 'unit.eur': '€',
+ 'unit.eurm': '€/μῆνα',
+ 'ui.hintFor': function(p){ return 'Ἐξήγησις περί· ' + p.label; },
+ 'ui.cnt.legal': function(p){ return p.n + ' μεγέθη λογισμοῦ'; },
+ 'ui.cnt.fields': function(p){ return p.n + ' χῶραι'; },
+ 'group.bav': 'Ἡ προσθήκη καὶ οἱ τρόποι τῆς ἀποδόσεως καθ᾽ ἕκαστον',
+ 'group.person': 'Χρόνος, ἀπαλλαγή, μερικὴ ἐργασία',
+ 'group.steuer': 'Φόρος, τίμημα, τέκνα',
+ 'group.markt': 'Δαπάναι καὶ πληθωρισμός',
+ 'group.ruhe': 'Γῆρας',
+ 'group.p_sv': 'Μεγέθη λογισμοῦ· ἀσφάλισις κοινωνική 2026',
+ 'group.p_est': 'Μεγέθη λογισμοῦ· φόρος προσόδου 2026 (§ 32a EStG)',
+ 'group.p_kap': 'Μεγέθη λογισμοῦ· φόρος κεφαλαίου καὶ ταμιείων',
+ 'group.p_bav': 'Μεγέθη λογισμοῦ· γηροτροφία κατ᾽ ἐργαστήριον καὶ ἰδία',
+
+ /* ---------------- Πινακίδες ἀποτελέσματος ---------------- */
+ 'card.lead': 'πρῶτον',
+ 'card.unchanged': 'ἀμετάβλητον',
+ 'base.pinned': 'Δ πρὸς τὴν μνημονευθεῖσαν κατάστασιν',
+ 'base.delta': function(p){ return 'Δ ' + p.desc; },
+ 'base.none': 'Κίνησον κανόνα τινά — ἡ μεταβολὴ ἐνθάδε ὡς Δ φανεῖται.',
+ 'base.desc.prev': 'ἡ προτέρα κατάστασις',
+ 'base.desc.pinned': 'ἡ μνημονευθεῖσα κατάστασις',
+ 'base.desc.change': function(p){ return 'πρὸ τῆς μεταβολῆς τοῦ «' + p.label + '»'; },
+ 'verdict.pp': function(p){ return p.v + ' μέρη τοῖς ἑκατόν'; },
+
+ /* ---------------- Ζώνη παρακολουθοῦσα ---------------- */
+ 'sb.cap': function(p){ return p.label + ' · ' + p.unit + (p.kaufkraft ? ', κατὰ τὴν νῦν ἀξίαν' : ''); },
+ 'sb.aria': function(p){ return 'Ἀποτέλεσμα· ' + p.label; },
+
+ /* ---------------- Διαγράμματα ---------------- */
+ 'tab.sens': 'Εὐαισθησία',
+ 'tab.wf': 'Αἴτια τῆς ἀξίας',
+ 'tab.kap': 'Πορεία τοῦ κεφαλαίου',
+ 'tab.zer': 'Ἀνάλυσις τοῦ μηνός',
+ 'chart.error': function(p){ return 'Τὸ διάγραμμα οὐ δείκνυται· ' + p.msg; },
+ 'sens.legendY': function(p){ return 'y· ' + p.label + ' (' + p.unit + ')'; },
+ 'wf.up': 'αὔξει τὸ κέρδος',
+ 'wf.down': 'μειοῖ τὸ κέρδος',
+ 'wf.legend': 'Ἀξία νῦν τοῦ καθαροῦ κέρδους, κατὰ τὴν νῦν ἀξίαν',
+ 'wf.barinfo': function(p){ return p.label + '· ' + p.note; },
+ 'wfb.vp.label': 'Ἡ τῆς Vorabpauschale ἀναίρεσις',
+ 'wfb.zul.label': 'Δωρεαὶ καὶ ἀφαίρεσις ἰδίων δαπανῶν',
+ 'wfb.arch.label': 'Ἡ τοῦ φόρου κατασκευή (τὸ λοιπόν)',
+ 'wfb.agz.label': 'Προσθήκη τοῦ μισθοδότου',
+ 'wfb.tarif.label': 'Διαφορὰ τῶν φόρων καὶ τὸ λοιπόν',
+ 'wfb.kvpv.label': 'Νόσος καὶ θεραπεία ἐπὶ τοῖς Versorgungsbezüge',
+ 'wfb.ep.label': 'Ζημία τῶν σημείων συντάξεως',
+ 'kap.rentbeg': 'Ἀρχὴ τῆς συντάξεως',
+ 'kap.swap': 'Κεφάλαιον → δικαίωμα συντάξεως',
+ 'kap.legend': 'συνεχής· τὸ ὅλον &nbsp;·&nbsp; διακεκομμένη· τὸ ἐλεύθερον',
+ 'zer.netto': 'καθαρόν',
+ 'zer.tax': 'φόρος',
+ 'zer.kv': 'νόσος/θεραπεία',
+ 'zer.pension': 'σύνταξις',
+ 'zer.legend': '<span><i style="background:#808080"></i>φόρος</span><span><i style="background:#800000"></i>νόσος/θεραπεία</span><span><i style="background:#800080"></i>σύνταξις ἀπολωλυῖα</span><span style="margin-left:auto">βάθρον ἔγχρωμον = τὸ λειπόμενον</span>',
+
+ /* ---------------- Ὁδὸς τοῦ λογισμοῦ ---------------- */
+ 'det.h.bav': 'bAV',
+ 'det.h.av': 'AV-ταμιεῖον',
+ 'det.h.priv': 'ἴδιον',
+ 'det.h.kennzahl': 'Σημεῖον',
+ 'det.h.wert': 'Ἀξία',
+ 'det.erg.netto': 'Τὸ ἐκ τοῦ καθαροῦ εἰσενεχθὲν ὅλον (κατ᾽ ὄνομα)',
+ 'det.erg.fremd': 'Ἀλλότριον ἀργύριον (προσθήκη ἢ δωρεαί)',
+ 'det.erg.kapital': 'Κεφάλαιον ἐν ἀρχῇ τῆς ἀποδόσεως',
+ 'det.erg.brutto': 'Τὸ ὅλον τῶν ὅλων ἀποδόσεων',
+ 'det.erg.steuer': 'ὧν φόρος προσόδου καὶ κεφαλαίου',
+ 'det.erg.kvpv': 'ὧν ἀσφάλισις νόσου καὶ θεραπείας',
+ 'det.erg.rentenverlust': 'Ζημία τῆς κατὰ νόμον συντάξεως (ἀθροιστική)',
+ 'det.erg.nettoausz': 'Τὸ ὅλον τῶν καθαρῶν ἀποδόσεων (κατ᾽ ὄνομα)',
+ 'det.erg.bwausz': 'Ἀξία νῦν τῶν καθαρῶν ἀποδόσεων',
+ 'det.erg.bwaufw': 'Ἀξία νῦν τῆς καθαρᾶς δαπάνης',
+ 'det.erg.ertrag': 'Ἀξία νῦν τοῦ καθαροῦ κέρδους',
+ 'det.erg.verhaeltnis': 'Λόγος κέρδους πρὸς δαπάνην',
+ 'det.erg.irr': 'Τόκος ὁ ἐντός (κατ᾽ ὄνομα)',
+ 'det.erg.vorsprung': 'Ὑπεροχὴ πρὸς τὸ ἴδιον ταμιεῖον',
+ 'det.mon.brutto': 'Ἀπόδοσις ὅλη κατὰ μῆνα',
+ 'det.mon.steuer': 'ἀφαιρουμένου τοῦ φόρου προσόδου καὶ κεφαλαίου',
+ 'det.mon.kvpv': 'ἀφαιρουμένης τῆς ἀσφαλίσεως νόσου καὶ θεραπείας',
+ 'det.mon.ep': 'ἀφαιρουμένης τῆς ζημίας τῆς κατὰ νόμον συντάξεως',
+ 'det.mon.netto': 'ΚΑΘΑΡΟΝ ΚΑΤΑ ΜΗΝΑ (κατὰ τὴν νῦν ἀξίαν)',
+ 'det.diag.beitrag': 'Εἰσφορὰ ὅλη bAV κατὰ μῆνα',
+ 'det.diag.aufwand': 'Δαπάνη καθαρὰ κατὰ μῆνα (ἔτος πρῶτον)',
+ 'det.diag.grenzsteuer': 'Λόγος φόρου ἔσχατος ἐν τῇ συλλογῇ (ἔτος πρῶτον)',
+ 'det.diag.ersparnis': 'Λόγος φειδοῦς ὅλος (φόρος καὶ εἰσφοραί), ἔτος πρῶτον',
+ 'det.diag.svAG': 'φειδὼ εἰσφορῶν τοῦ μισθοδότου ἡ ἀληθής',
+ 'det.diag.svAN': 'φειδὼ εἰσφορῶν τοῦ μισθωτοῦ ἡ ἀληθής',
+ 'det.diag.ngef': 'Μέρος τῶν bAV-εἰσφορῶν ἄνευ δωρεᾶς (ἔτος πρῶτον)',
+ 'det.diag.aussch': 'Χρῆσις τοῦ κατὰ νόμον δικαιώματος (4 % τοῦ BBG-RV)',
+ 'det.diag.agzVar': 'ὧν προσθήκη μισθοδότου· κατὰ ἑκατόν (ἔτος πρῶτον)',
+ 'det.diag.agzFix': 'ὧν προσθήκη μισθοδότου· ποσὸν ὡρισμένον (ἔτος πρῶτον)',
+ 'det.diag.agzFixUeber4': 'προσθήκη ὡρισμένη ὑπὲρ τὸ τῶν 4 % ἀγγεῖον (οὐ λελογισμένη ὡς βάρος)',
+ 'det.diag.vbMonat': 'Versorgungsbezug κατὰ μῆνα ἐν ἀρχῇ τῆς ἀποδόσεως',
+ 'det.diag.freibetrag': 'Ἀτέλεια τῶν Versorgungsbezüge τῷ αὐτῷ ἔτει',
+ 'det.diag.vbQuote': 'Λόγος τοῦ Versorgungsbezug πρὸς τὴν ἀτέλειαν',
+ 'det.diag.kapFreiKapital': 'κεφάλαιον ἀνείσφορον δυνατόν (ἀπόδοσις κεφαλαίου)',
+ 'det.diag.kapFreiRente': 'κεφάλαιον ἀνείσφορον δυνατόν (σύνταξις διὰ βίου)',
+ 'det.diag.memoRest': 'ΜΝΗΜΗ· ἀποδόσεις bAV μετὰ τὸν ὅρον',
+ 'det.diag.memoRestAv': 'ΜΝΗΜΗ· σύνταξις τοῦ ταμιείου μετὰ τὸν ὅρον',
+ 'det.diag.wiederanl': 'Τόκος τῆς ἀνακαταθέσεως μετὰ τοὺς φόρους',
+ 'det.diag.kapstEff': 'φόρος κεφαλαίου ὁ ἀληθὴς σὺν τῇ προσθήκῃ καὶ τῷ ἱερῷ φόρῳ',
+ 'det.diag.bestAnteil': 'Μέρος φορολογητὸν τῆς κατὰ νόμον συντάξεως',
+ 'det.anspar.h.jahr': 'Ἔτος',
+ 'det.anspar.h.brutto': 'Ὅλον',
+ 'det.anspar.h.beitrag': 'Εἰσφορὰ bAV',
+ 'det.anspar.h.agzVar': 'Προσθ. %',
+ 'det.anspar.h.agzFix': 'Προσθ. ὡρισμ.',
+ 'det.anspar.h.sv': 'Φειδὼ εἰσφ.',
+ 'det.anspar.h.st': 'Φειδὼ φόρου',
+ 'det.anspar.h.netto': 'Δαπάνη καθαρά',
+ 'det.anspar.h.zul': 'Δωρεαί',
+ 'det.anspar.h.kbav': 'Κεφάλαιον bAV',
+ 'det.anspar.h.kav': 'Κεφάλαιον AV',
+ 'det.anspar.h.kpriv': 'Κεφάλαιον ἴδιον',
+ 'det.row.year': function(p){ return p.jahr + ' (ἡλικία ' + p.alter + ')'; },
+ 'det.ausz.h.jahr': 'Ἔτος',
+ 'det.ausz.h.bavBr': 'bAV ὅλον',
+ 'det.ausz.h.kvpv': 'νόσος/θεραπ.',
+ 'det.ausz.h.steuer': 'Φόρος',
+ 'det.ausz.h.mind': 'Μείωσις συντάξεως',
+ 'det.ausz.h.bavNet': 'bAV καθαρόν',
+ 'det.ausz.h.avBr': 'AV ὅλον',
+ 'det.ausz.h.avNet': 'AV καθαρόν',
+ 'det.ausz.h.privBr': 'ἴδιον ὅλον',
+ 'det.ausz.h.privNet': 'ἴδιον καθαρόν',
+ 'det.ann.h.annahme': 'Ὑπόθεσις',
+ 'det.ann.h.vertrauen': 'Πίστις',
+ 'det.ann.h.anmerkung': 'Σημείωσις',
+ 'det.ann.r1.a': 'Μεγέθη κοινωνικῆς ἀσφαλίσεως 2026, φόρος § 32a 2026',
+ 'det.ann.r1.c': 'SVBezGrV 2026, Steuerfortentwicklungsgesetz',
+ 'det.ann.r2.a': 'Ἀνάγκη εἰσφορᾶς νόσου ἐπὶ τοῖς Versorgungsbezüge',
+ 'det.ann.r2.c': '§§ 229, 250 SGB V',
+ 'det.ann.r3.a': 'Ἀτέλεια § 226 Abs. 2 S. 2 SGB V (νόσος)',
+ 'det.ann.r3.c': 'ἀναμφισβήτητον',
+ 'det.ann.r4.a': 'Ὅρος ἀντὶ ἀτελείας ἐν τῇ θεραπείᾳ',
+ 'det.ann.r4.c': 'ἡ συχνοτάτη ἁμαρτία τῶν συμβουλευτικῶν λόγων',
+ 'det.ann.r5.a': 'Ἀνεισφορία τῆς τοῦ AV-ταμιείου ἀποδόσεως',
+ 'det.ann.r5.c': 'οὐκ εἰσὶ Versorgungsbezüge',
+ 'det.ann.r6.a': 'Ἥμισυ τῆς διαφορᾶς τοῖς ἀδωρήτοις στρώμασιν',
+ 'det.ann.r6.c': '§ 22 Nr. 5 S. 2 Buchst. b i.V.m. § 20 Abs. 1 Nr. 6 S. 2 EStG',
+ 'det.ann.r7.a': 'Προσθήκη μέχρι τῆς ἀληθοῦς τοῦ μισθοδότου φειδοῦς μόνον',
+ 'det.ann.r7.c': 'ἡ ἐναντία δόξα τὰ 15 % ὡς ψιλὸν ὡρισμένον ἀναγιγνώσκει',
+ 'det.ann.r8.a': 'Ἀφαίρεσις ἰδίων δαπανῶν μεγίστη 2.340 €',
+ 'det.ann.r8.c': 'ΥΠΟΘΕΣΙΣ ΤΟΥ ΠΑΡΑΔΕΙΓΜΑΤΟΣ. Κρίνει εἰ τέκνον τὴν τοῦ AV-ταμιείου ἀξίαν αὔξει ἢ μειοῖ',
+ 'det.ann.r9.a': 'Ἀνάγκη ἀσφαλίσεως KVdR ἐν τῷ γήρᾳ ὑποτίθεται',
+ 'det.ann.r9.c': 'οἱ ἑκόντες ἠσφαλισμένοι οὐκ ἐξητάσθησαν',
+ 'det.t.prinzip': 'Ἡ ἀρχὴ τῆς συγκρίσεως',
+ 'det.t.erg': 'Τὸ ἀποτέλεσμα καθ᾽ ἕκαστον',
+ 'det.t.mon': 'Ἡ μηνιαία ἀπόδοσις, ἀναλελυμένη',
+ 'det.t.diag': 'Διάγνωσις',
+ 'det.t.anspar': 'Ἡ συλλογή, ἔτος καθ᾽ ἕκαστον',
+ 'det.t.ausz': 'Ἡ ἀπόδοσις, ἔτος καθ᾽ ἕκαστον',
+ 'det.t.ann': 'Ἡ τῶν ὑποθέσεων βεβαιότης',
+
+ /* ---------------- Σῴζειν καὶ μεταδιδόναι ---------------- */
+ 'msg.loaded': 'Εἰσήχθη.',
+ 'msg.loadError': function(p){ return 'Τὸ ἀρχεῖον οὐκ ἀνεγνώσθη· ' + p.msg; },
+ 'msg.reset': 'Ἀποκατέστη εἰς τὴν βασικὴν κατάστασιν.',
+
+ /* ---------------- PWA ---------------- */
+ 'pwa.installBtn': 'Ἐγκαθιστάναι',
+ 'pwa.installed': '<b>Ἐγκατεστάθη.</b> Εὑρήσεις νῦν τὸ πρόγραμμα μετὰ τῶν ἄλλων.',
+
+ /* ---------------- Αἱ μακραὶ ἐξηγήσεις — ἡ δευτέρα ἔκδοσις ---------------- */
+ 'f.I:gehalt.hint': 'Ἄνευ τῶν ἅπαξ διδομένων. Τοῦτο ὁρίζει τὸν ὅρον τοῦ φόρου σου καὶ εἰ ὑπὲρ τὸν ὅρον τῆς εἰσφορᾶς εἶ.',
+ 'f.I:beitrag.hint': 'Εἰσφορὰ ὅλη κατὰ τὸν νόμον § 1a BetrAVG. Τὸ δικαίωμα ἐστὶ μέχρι 4 τοῖς ἑκατὸν τοῦ ὅρου τῆς εἰσφορᾶς RV· ὑπὲρ τούτου δεῖ τῆς τοῦ μισθοδότου συγκαταθέσεως.',
+ 'f.I:netto_ziel.hint': 'Ἡ ἀξία, ἣν τὸ ἀργύριόν σου ἐν τῷ πρώτῳ ἔτει μειοῖ — ἡ ἀληθῶς ἀφειμένη χρῆσις. Ἡ αὐτὴ ἀξία ἐν πάσαις ταῖς τρισὶν αἱρέσεσι τίθεται, ἵνα ὀρθῶς συγκρίνηται. Κατὰ τοῦτον τὸν ὅρον ἡ εἰσφορὰ ἀεὶ αὔξεται, καὶ πάλιν λογισθῆναι δύναται.',
+ 'f.I:agzus.hint': 'Τὰ κατὰ νόμον ἐλάχιστα ἐστὶ 15 τοῖς ἑκατὸν (§ 1a Abs. 1a BetrAVG)· πολλοὶ δὲ μισθοδόται πλέον διδόασιν. Ἵνα πρὸς τὸ ἴδιον ταμιεῖον συγκρίνῃς, ἔνθα καὶ ἡ προσθήκη καὶ τὸ ἴδιον ἀργύριον ἴσα ἐστίν, τῷ τῆς λογιστικῆς λόγῳ χρῆσθαι δύνασαι.',
+ 'f.I:agz_fix.hint': 'Προσθήκη ὡρισμένη, κατὰ σύμβασιν φόρου ἢ ἐργασίας τεταγμένη — ὥσπερ παρὰ τῇ Deutsche Bahn καὶ πολλαῖς ἄλλαις συμβάσεσιν, ἔνθα ἡ προσθήκη τὰ 15 τοῖς ἑκατὸν τοῦ § 1a Abs. 1a BetrAVG πληροῖ. Αὕτη ἐστὶ τοῦ μισθοδότου εἰσφορὰ κατὰ § 3 Nr. 63 EStG καὶ πρῶτον πληροῖ τὸ τῶν 8 % καὶ τὸ τῶν 4 % ἀγγεῖον (§ 1 Abs. 1 S. 1 Nr. 9 SvEV)· ἡ ἰδία σου μεταβολὴ οὖν ἔλαττον καὶ τιμιωτέρα γίγνεται.',
+ 'f.I:agz_fix_dyn.hint': 'Αἱ ὡρισμέναι ἀξίαι κατ᾽ ὄνομα ἐν τῇ συμβάσει μένουσι καὶ μόνον νέαις συμβάσεσιν αὔξονται — ἡ πρώτη κατ᾽ ὄνομα ἀμετάβλητος μένει. Ἐν 27 ἔτεσι καὶ 2 τοῖς ἑκατὸν πληθωρισμοῦ λείπεται 1,02⁻²⁷ ≈ 0,59· ὅστις τοῦτο μικρὸν ἀβεβαίως κρίνει, τὸ «σὺν τῷ μισθῷ» αἱρείσθω.',
+ 'f.I:agzus_sv.hint': 'Τὸ «κατ᾽ ἀκρίβειαν λελογισμένον» νόμιμόν ἐστι ῥῆμα· ὁ § 1a Abs. 1a BetrAVG κελεύει τὸν μισθοδότην τοσοῦτον προστιθέναι, ὅσον ἀληθῶς ἐκ τῆς εἰσφορᾶς φείδεται. Ἐὰν ὁ μισθός σου ὑπὲρ ἀμφοτέρους τοὺς ὅρους ᾖ, οὐδὲν φείδεται καὶ οὐδὲν ὀφείλει. Διὰ τοῦτο ὁ πρῶτος λογισμὸς ἐν τῷ ἀργυρίῳ μέχρι 21 τοῖς ἑκατὸν ἀκριβέστερος γίγνεται. Ἡ πίστις τούτου τοῦ λογισμοῦ ἐστὶ περὶ τὰ 75 τοῖς ἑκατόν.',
+ 'f.I:dyn.hint': 'Ἐὰν ἡ εἰσφορὰ σὺν τῷ μισθῷ αὔξηται, ἡ χρῆσις τοῦ τῶν 8 % ἀγγείου κατ᾽ ἔτος ἴση μένει. Ἐὰν δὲ κατ᾽ ὄνομα ὡρισμένη μένῃ, ἡ ἀξία αὐτῆς σὺν τῷ πληθωρισμῷ ἐλαττοῦται — καὶ ἡ καθαρὰ χρῆσις, ἣν αἱ ἄλλαι δύο αἱρέσεις συγκρίνειν δέον, ὁμοίως ἐλαττοῦται.',
+ 'f.I:rendite.hint': 'Πρὸ κέρδους, πρὸ φόρου. Ἐν πάσαις ταῖς τρισὶν αἱρέσεσι τὸ αὐτὸ ETF — οὕτω μόνον αἱ κατασκευαὶ τῆς γηροτροφίας συγκρίνονται, οὐχ αἱ γνῶμαι περὶ τῶν χρημάτων.',
+ 'f.I:alter.hint': 'Ἡ ἀρχὴ τῆς φειδοῦς. Ἔτος 0 = 2026.',
+ 'f.I:rentbeg.hint': 'Ἡ ἀρχὴ τῆς ἀποδόσεως ἐν πάσαις ταῖς τρισὶν αἱρέσεσι. Τὸ Altersvorsorgedepot δύναται ἀπὸ τῶν 65 ἐτῶν πρῶτον ἀποδίδοσθαι (νεωστὶ ὡρισμένον 2026).',
+ 'f.I:kv_ruhe.hint': 'Ὁ δυνατὸς οἰκέτης. Ἐν τῇ κατὰ νόμον ἀσφαλίσει νόσου τὰ κατ᾽ ἐργαστήριον διδόμενα καλεῖται Versorgungsbezüge καὶ φέρει πᾶν τὸν λόγον τῆς εἰσφορᾶς (§§ 229, 250 SGB V)· ἡ ἰδία γηροτροφία τοῦτο οὐ φέρει. Μία αἵρεσις ἐνταῦθα τὴν ὁδὸν μεταβάλλει.',
+ 'f.I:auszform.hint': 'Κεφάλαιον· τὸ ἅπαξ διδόμενον ὅλον τῆς εἰσφορᾶς νόσου ἐπὶ 120 μῆνας διαιρεῖται (§ 229 Abs. 1 S. 3 SGB V). Ἡ σύνταξις διὰ βίου τὴν δόσιν ἐπὶ πάντα τὸν βίον ἐκτείνει καὶ οὕτω πλέον ἀργύριον τῇ αὐτῇ ἀτελείᾳ σῴζει. Τοῦτο τὸ παράδειγμα ἢ ὅλον ἢ οὐδὲν αἱρεῖσθαι δύναται· τὸ ἥμισυ κεφάλαιον τῆς bAV ἐνταῦθα οὐ παρίσταται.',
+ 'f.I:teilkap.hint': 'Μέχρι 30 τοῖς ἑκατὸν τοῦ συλλεγέντος ἀργυρίου δύναται ἐν ἀρχῇ τῆς ἀποδόσεως ὡς μία δόσις λαμβάνεσθαι — ἐν ἀμφοτέραις ταῖς αἱρέσεσιν. Ὁ κόσμος δισσὴν αἰτίαν ἔχει· ἡ πᾶσα αὔξησις τοῦ ἔτους ἐκείνου εὐθὺς λαμβάνεται, καὶ μετὰ ταῦτα ὁ τόκος μόνον κατὰ τὸ ὑπολειπόμενον ἀργύριον γίγνεται. Ἡ ἀνωτάτη ἀξία τοῦ ἔτους (ὁ «κόλπος») ἄνευ φόρου δίδοται· τοῦτο ἔθος τοῦ παραδείγματος ἐστίν, οὐ νόμιμον.',
+ 'f.I:av_auszform.hint': 'Τὸ μετὰ τὴν μίαν δόσιν τῷ λοιπῷ ἀργυρίῳ γιγνόμενον — χωρὶς τῆς τῆς bAV αἱρέσεως. Τάξις τῆς ἀποδόσεως· τὸ ἀργύριον συλλέγεται καὶ σὺν τόκῳ ἀποδίδοται· τὸ μὴ δοθὲν μέρος τῷ ἡμίσει τῆς διαφορᾶς φορολογεῖται. Σύνταξις διὰ βίου· τὸ κεφάλαιον τῷ μισθοδότῃ (ταμιείῳ) δίδοται, τὸ δὲ μὴ δοθὲν μέρος μόνον κατὰ τὸ μέρος τοῦ καρποῦ φορολογεῖται (§ 22 Nr. 5 S. 2 Buchst. a EStG, 17 τοῖς ἑκατὸν ἀπὸ τῶν 67 ἐτῶν, ἐνταῦθα 26 τοῖς ἑκατόν). Τὸ δοθὲν μέρος ἐν ἀμφοτέραις ταῖς αἱρέσεσι πᾶν ἀποδίδοται, τοῦτο οὐ μεταβάλλεται.',
+ 'f.I:agz_fix_min.hint': 'Ὅμοια παραδείγματα τὴν ὡρισμένην ἀξίαν πρὸς τὴν ἐλαχίστην ἰδίαν εἰσφορὰν δεσμεύουσιν. Τὸ 0 ἄνευ δεσμοῦ σημαίνει — τότε ἡ προσθήκη ἑκάστου ἔτους τῆς ἐργασίας γίγνεται, καὶ μηδεμιᾶς εἰσφορᾶς οὔσης. Σκόπει· ἀληθὴς προσθήκη ἄνευ δεσμοῦ οὐκ ἂν διαφορὰ τοῦ δεσμοῦ τῆς μεταβολῆς εἴη, καὶ πρὸς τὴν bAV ἀντετίθετο ἄν, καὶ εἰ ἄνευ μεταβολῆς ἐγίγνετο. Σημείωσαι μόνον τὸ ἀληθῶς ἐκ τῆς αἱρέσεως ἠρτημένον.',
+ 'f.I:rentfak_av.hint': 'Λόγος τοῦ ἀργυρίου τοῦ εἰς σύνταξιν γιγνομένου. Ὥσπερ ἐν τῇ bAV ὡρισμένος· ἡ πίστις τοῦ ἀργυρίου ἄνευ ἀσφαλίσεως νόσου εἶναι δύναται καὶ οὕτω κρείττων εἶναι. Ἐπὶ τῷ 0 οὐδεμία σύνταξις.',
+ 'f.I:rentdyn_av.hint': 'Μέρος ὑπὲρ τὸ ἔργον ἢ λόγος τῆς αὐξήσεως ἐν τοῖς χρόνοις τῆς ἀποδόσεως τῆς πίστεως τοῦ ἀργυρίου.',
+ 'f.I:rentfak.hint': 'Λόγος τῆς αἱρέσεως τῆς ἀποδόσεως «σύνταξις». 26 € κατὰ μῆνα σύνταξις ἐπὶ 10.000 € ἐστὶν ὡς 3,1 τοῖς ἑκατὸν λαμβανόμενα. Κεῖται ἐν τῷ βιβλίῳ τῆς πίστεως τῆς ἐργασίας.',
+ 'f.I:rentdyn.hint': 'Μέρος ὑπὲρ τὸ ἔργον ἢ λόγος τῆς αὐξήσεως ἐν τοῖς χρόνοις τῆς ἀποδόσεως.',
+ 'f.I:fuenftel.hint': 'Ὁ § 34 EStG ἐπὶ τεταγμένῃ τοῦ κεφαλαίου ἀποδόσει ἐκ συμβάσεων § 3 Nr. 63 κατὰ BFH X R 23/15 ἐνίοτε χρῆται. Βεβαίως· οὔ.',
+ 'f.I:planende.hint': 'Ἡ τάξις τῆς ἀποδόσεως μέχρι τούτου γίγνεται. Ἡ σύνταξις κατὰ νόμον τῷ αὐτῷ ὅρῳ συγκρίνεται· τὸ δὲ μετὰ τοῦτο γιγνόμενον ὡς μνήμη ὑπὸ τῇ «Διαγνώσει» κεῖται. Ὅστις γηράσκει, ἐκεῖ κερδαίνει.',
+ 'f.I:ausscheid.hint': 'Ἐντεῦθεν οὔτε μισθὸς οὔτε εἰσφορά. Τὸ ἀργύριον τοκίζεται μέχρι τῆς ἀρχῆς τῆς ἀποδόσεως.',
+ 'f.I:tzalter.hint': 'Πᾶσα ἀξία ἀπὸ τῆς ἀρχῆς τῆς ἀποδόσεως λογίζεται· οὐχ ἥμισυ ἔργον. Ὥρισται 67.',
+ 'f.I:tzfaktor.hint': 'Μέρος τοῦ ὅλου μισθοῦ τῆς ἐργασίας. 60 τοῖς ἑκατὸν = ὁ τῶν 60 τόπος.',
+ 'f.I:gsteig.hint': 'Καὶ φέρει πρὸ τοῦ ὅρου τῆς εἰσφορᾶς, τῆς Bezugsgröße, τοῦ μέσου μισθοῦ καὶ τῆς τοῦ φόρου ἀξίας.',
+ 'f.I:stkl.hint': 'Δυνατὸς ὁ ΤΡΟΠΟΣ ΤΟΥ ΤΙΜΗΜΑΤΟΣ ἐστίν, οὐχ ἡ τάξις τοῦ φόρου τοῦ μισθοῦ· αὕτη ἡ τάξις τὴν κατ᾽ ἔτος ἀφαίρεσιν ὁρίζει, τὰ δὲ ἐτήσια βιβλία ὅμως τῷ ἡμίσει κατὰ § 32a Abs. 5 EStG λογίζεται. Ἐπὶ τῷ «κοινῇ» ἀνάγκη τὴν τοῦ φόρου ἀξίαν τοῦ κοινωνοῦ σημειοῦσθαι.',
+ 'f.I:partner.hint': 'Λόγος πρὸς τὸν κοινῇ φόρον. Λογίζεται 2·ESt((zvE + zvE_κοινωνοῦ)/2).',
+ 'f.I:kist.hint': '8 τοῖς ἑκατὸν ἐν Βαυαρίᾳ καὶ Βάδῃ-Βυρτεμβέργῃ, ἀλλαχοῦ 9, 0 τοῖς τῆς ἐκκλησίας ἀπελθοῦσιν. Καὶ ὁ ἱερὸς φόρος οὕτω λογίζεται· 0,25/(1+0,25k)·(1+0,055+k).',
+ 'f.I:tarifanp.hint': 'Πᾶς φόρος τῷ τῆς τιμῆς αὐξήματι λ = (1+x)^t μεμετρημένος λογίζεται· ESt = s·λ·T(zvE/s/λ). Τοῦτο οὕτως ἐστίν, ὥσπερ πάντες οἱ ὅροι ὁμοίως αὔξονται. Τὰ 0 τοῖς ἑκατὸν πᾶσαν ψυχρὰν αὔξησιν δεικνύουσιν.',
+ 'f.I:kinder.hint': 'Δωρεὰ τέκνων εἰς τὸ Altersvorsorgedepot· 1 € καθ᾽ ἕκαστον € ἰδίας εἰσφορᾶς, μέχρι 300 € καθ᾽ ἕκαστον τέκνον.',
+ 'f.I:kind_jahre.hint': 'Αὕτη ἡ δωρεὰ τῆς δυνάμεως τοῦ μισθοῦ τῶν τέκνων ἔχεται (§ 85 EStG), ὥστε οὐ πᾶσα διὰ τῆς φειδοῦς γίγνεται.',
+ 'f.I:kinderlos.hint': '0,6 τοῖς ἑκατὸν προσθήκη πρὸς τὴν εἰσφορὰν τῆς θεραπείας, τοῖς ἀτέκνοις (§ 55 Abs. 3 SGB XI).',
+ 'f.I:k_bav.hint': 'Λόγος τῆς ἀσφαλίσεως νόσου καὶ TER. Ἀληθεῖς αἱ χρήσεις ἐν τῷ βιβλίῳ τῆς πίστεως τῆς ἐργασίας κεῖνται — ἐκεῖ σκόπει, μὴ ἐντεῦθεν κρίνῃς.',
+ 'f.I:k_av.hint': 'Ἐπὶ τεταγμένῳ ἀργυρίῳ αἱ ἀληθεῖς χρήσεις κατὰ νόμον ὥρισται μέχρι 1,0 τοῖς ἑκατὸν κατ᾽ ἔτος.',
+ 'f.I:k_priv.hint': 'Ψιλὸν TER τῶν τῆς οἰκουμένης ETF.',
+ 'f.I:infl.hint': 'Μειοῖ πᾶσαν ἀξίαν εἰς «κατὰ τὴν νῦν ἀξίαν». Ὀλίγον τὴν ὀρθότητα μεταβάλλει, πᾶσαν δὲ τὴν αὔξησιν.',
+ 'f.I:sonst_zve.hint': 'Πρῶτον τὸ φορολογητὸν μέρος τῆς κατὰ νόμον συντάξεως, ἄνευ τοῦ ἐνταῦθα προστεθέντος ἀργυρίου. Τοῦτο τὸν ὅρον τοῦ λόγου τοῦ φόρου ἐν τοῖς χρόνοις τῆς ἀποδόσεως ὁρίζει — καὶ οὕτω τὴν διαφορὰν τοῦ φόρου t₀ − t₁.',
+ 'f.I:rente_br.hint': 'Λόγος ἐν τῇ ἀσφαλίσει νόσου· ἡ κατὰ νόμον σύνταξις καὶ τὰ Versorgungsbezüge ἕνα ὅρον εἰσφορᾶς μερίζονται (§ 223 Abs. 3 SGB V).',
+ 'f.P:bbg_rv.hint': 'SVBezGrV 2026 (BGBl. 2025 I Nr. 116), ὁμοία ἐν πάσῃ τῇ ἀρχῇ.',
+ 'f.P:bbg_kv.hint': 'SVBezGrV 2026· 5.812,50 € κατὰ μῆνα.',
+ 'f.P:bezug.hint': 'SVBezGrV 2026, 47.460 € κατ᾽ ἔτος. Δέκατον μέρος τούτου ἐστὶν ἡ ἀτέλεια τῶν Versorgungsbezüge ἐν τῇ ἀσφαλίσει νόσου (§ 226 Abs. 2 S. 2 SGB V).',
+ 'f.P:de_rv.hint': 'Παράρτημα 1 τοῦ SGB VI, ἀξία 2026 — ὁ ἀριθμὸς τοῦ σημείου συντάξεως.',
+ 'f.P:rw.hint': 'Rentenwertbestimmungsverordnung 2026, ἀπὸ 1.7.2026· 42,52 € (+4,24 τοῖς ἑκατόν).',
+ 'f.P:rv_an.hint': '18,6 τοῖς ἑκατόν, ἥμισυ καὶ ἥμισυ.',
+ 'f.P:av_an.hint': '2,6 τοῖς ἑκατόν, ἥμισυ καὶ ἥμισυ.',
+ 'f.P:kv_allg.hint': '§ 241 SGB V.',
+ 'f.P:kv_zus.hint': 'Κατὰ τὸ BMG γνωστόν· ἑκάστη ἀσφάλισις ἄλλως — σημείωσαι τὴν ἰδίαν σου προσθήκην.',
+ 'f.P:pv_ges.hint': '§ 55 SGB XI. Ἡ μείωσις διὰ τέκνον ἀπὸ ἄλλου τέκνου οὐ παρίσταται.',
+ 'f.P:pv_an.hint': 'Ἐν Σαξονίᾳ ἄλλως (2,3 τοῖς ἑκατόν).',
+ 'f.P:pv_kl.hint': '§ 55 Abs. 3 SGB XI, τοῖς ἀτέκνοις.',
+ 'f.P:gfb.hint': '§ 32a Abs. 1 EStG κατὰ τὸ Steuerfortentwicklungsgesetz.',
+ 'f.P:e2.hint': 'Ὁ ὅρος τοῦ λόγου τοῦ φόρου ἀπὸ 14 εἰς 23,97 τοῖς ἑκατὸν αὔξεται.',
+ 'f.P:e3.hint': 'Ὁ ὅρος τοῦ λόγου τοῦ φόρου ἀπὸ 23,97 εἰς 42 τοῖς ἑκατὸν αὔξεται.',
+ 'f.P:e4.hint': 'Ἀπὸ 277.826 € ἴσα τοῖς 45 τοῖς ἑκατόν.',
+ 'f.P:a2.hint': 'ESt = (a₂·y + b₂)·y, y = (zvE − τὴν βασικὴν ἀτέλειαν)/10.000.',
+ 'f.P:a3.hint': 'ESt = (a₃·z + b₃)·z + c₃, z = (zvE − 17.799)/10.000.',
+ 'f.P:c4.hint': 'ESt = 0,42·zvE − c₄.',
+ 'f.P:c5.hint': 'ESt = 0,45·zvE − c₅.',
+ 'f.P:soli.hint': 'SolzG 1995.',
+ 'f.P:soli_fg.hint': '2026, ἀτελὴς εἰσφορά, κατὰ τὸν ὀρθὸν ESt· κοινῇ διπλασία. Καὶ ζώνη μετριασμοῦ.',
+ 'f.P:soli_mz.hint': '§ 3 Abs. 2a SolzG.',
+ 'f.P:an_pausch.hint': '§ 9a S. 1 Nr. 1a EStG.',
+ 'f.P:sa_pausch.hint': '§ 10c EStG.',
+ 'f.P:kapst.hint': '§ 32d Abs. 1 EStG.',
+ 'f.P:tfs.hint': '§ 20 Abs. 1 Nr. 3 σὺν § 20 InvStG, μέρος μετοχῶν ὑπὲρ 50 τοῖς ἑκατόν.',
+ 'f.P:sparerpb.hint': '§ 20 Abs. 9 EStG· κοινῇ διπλασία. Ἀφαιρεῖ τὸ πλεῖστον μέρος τῆς Vorabpauschale — σκόπει τὴν διάγνωσιν ἐν τῇ πορείᾳ τῆς ἀξίας.',
+ 'f.P:basiszins.hint': 'Ἐπιστολὴ τοῦ BMF ἀπὸ 13.01.2026, § 18 Abs. 4 InvStG (2025· 2,53 τοῖς ἑκατόν). Ὡρισμένον ἐπὶ τὸ 0· οὐδεμία Vorabpauschale.',
+ 'f.P:vp_faktor.hint': '§ 18 Abs. 1 S. 1 InvStG.',
+ 'f.P:st_frei_q.hint': '8 τοῖς ἑκατὸν τοῦ BBG-RV = 8.112 € ἐν 2026.',
+ 'f.P:sv_frei_q.hint': '§ 1 Abs. 1 S. 1 Nr. 9 SvEV· 4 τοῖς ἑκατὸν = 4.056 € ἐν 2026. Ὁ αὐτὸς ὅρος τοῦ δικαιώματος κατὰ § 1a BetrAVG.',
+ 'f.P:zul_g1.hint': 'Altersvorsorgereformgesetz, κύριον ἀπὸ Μαΐου 2026, χρώμενον ἀπὸ 1.1.2027.',
+ 'f.P:zul_s1.hint': 'Μέχρι 360 € ἰδίας εἰσφορᾶς· 50 τοῖς ἑκατὸν καθ᾽ ἕκαστον €.',
+ 'f.P:zul_g2.hint': 'Ἀπὸ 361 μέχρι 1.800 €· 25 τοῖς ἑκατὸν καθ᾽ ἕκαστον €.',
+ 'f.P:zul_s2.hint': 'Πλείστη δόσις ἰδίας εἰσφορᾶς· ποιεῖ τὴν πλείστην ἀτελῆ δωρεὰν 540 €.',
+ 'f.P:kind_zul.hint': '1 € καθ᾽ ἕκαστον € ἰδίας εἰσφορᾶς, μέχρι 300 € καθ᾽ ἕκαστον τέκνον.',
+ 'f.P:av_max.hint': 'Ἐρώτημα τοῦ BMF περὶ τῆς νεωστὶ ὡρισμένης ἰδίας θεραπείας, 05.05.2026. Τὸ ἀνώτατον τοῦτο ἐπὶ ἄλλης ὁδοῦ γίγνεται, ὡς ἴδιον ἀργύριον λογιζόμενον.',
+ 'f.P:av_sa_max.hint': 'ΥΠΟΘΕΣΙΣ ΤΟΥ ΠΑΡΑΔΕΙΓΜΑΤΟΣ, πίστις 70 τοῖς ἑκατόν. Ἰδία εἰσφορὰ μέχρι 1.800 € καὶ δωρεαί. Μόνον τοῦτο κρίνει, εἰ τέκνον τὴν ἀξίαν τοῦ AV-ἀργυρίου αὔξει ἢ μειοῖ.',
+ 'f.P:ertragsq.hint': '§ 22 Nr. 1 S. 3 Buchst. a Doppelbuchst. bb EStG, τοῖς μὴ δοθεῖσι μέρεσι τῆς εἰσφορᾶς.',
+ 'f.P:halb.hint': '§ 20 Abs. 1 Nr. 6 S. 2 EStG ὁμοίως (σύμβασις ὑπὲρ 12 ἔτη, δόσις μετὰ τὰ 62)· ἥμισυ διαφορά. Πίστις 80 τοῖς ἑκατόν.',
+
+ /* ---------------- Πάντα τὰ λοιπὰ ῥήματα ---------------- */
+ 'app.meta': 'Ἡ κατ᾽ ἐργαστήριον γηροτροφία, τὸ Altersvorsorgedepot καὶ τὸ ἴδιον ETF-ταμιεῖον κατὰ τὸ αὐτὸ καθαρὸν κέρδος συγκρίνονται. Νόμιμος κατάστασις 2026.',
+ 'hdr.sub': 'Ἡ κατ᾽ ἐργαστήριον γηροτροφία, τὸ Altersvorsorgedepot καὶ τὸ ἴδιον ETF-ταμιεῖον &mdash; κατὰ <b>τὸ αὐτὸ καθαρὸν κέρδος</b> καὶ τὸ αὐτὸ ETF. Νόμιμος κατάστασις 2026.',
+ 'input.sub': 'Οὗτος ὁ λογισμὸς εὐθὺς νέος γίγνεται καθ᾽ ἑκάστην μεταβολήν. Σὺν τῷ <span class="qm" style="cursor:default">?</span> ἑκάστη χώρα ἑαυτὴν ἐξηγεῖται.',
+ 'extra.sub': 'Πάντα ταῦτα καλὴν ὑπόθεσιν ἔχει. Μὴ κίνει, εἰ μή σοι ἁρμόζει.',
+ 'calc.sub': 'Πᾶσι τοῖς τήνδε τὴν ὁδὸν βουλομένοις ἀκολουθεῖν.',
+ 'share.sub': 'Τὰ σὰ δεδομένα μόνον ἐν τούτῳ τῷ προγράμματι κεῖται (<kbd>localStorage</kbd>). Οὐδὲν πέμπεται, οὐδεμία ἀρχὴ οὐδὲ κατάσκοπος.',
+ 'footer.1': '<b>Οὔτε νόμιμος οὔτε χρηματιστικὴ συμβουλή ἐστιν.</b> Τὸ παράδειγμα οὐκ ἔστι πίστις. Ἡ νόμιμος κατάστασις τοῦ 2026 περὶ τῆς νεωστὶ ὡρισμένης θεραπείας ἐν πολλοῖς τόποις οὔπω τετέλεσται· αὗται αἱ ὑποθέσεις τῆς ἐλαχίστης πίστεως ὑπὸ τῇ «Ὁδῷ τοῦ λογισμοῦ → Βεβαιότητι τῶν ὑποθέσεων» κεῖνται καὶ ἐκεῖ μεταβάλλεσθαι δύνανται.',
+ 'footer.2': 'Ὁ πυρὴν τοῦ λογισμοῦ μόνον ἐκ τοῦ Excel-παραδείγματος <span class="pill">bAV-DYNO_vs_Altersvorsorgedepot_vs_ETF.xlsx</span> εἴληπται καὶ πρὸς τρεῖς πείρας κατὰ τὴν ὀρθότητα τοῦ ἀθροίσματος ἐξητάσθη (μεγίστη διαφορὰ 1,3·10<sup>&minus;14</sup>).',
+ 'metric.monat.desc': 'Ἴση μηνιαία ἀπόδοσις πάντα τὸν χρόνον τῆς ἀποδόσεως τῇ αὐτῇ ἀξίᾳ, κατὰ τὴν νῦν ἀξίαν. Λόγος, ὃν τῷ καθαρῷ σου ἀργυρίῳ νῦν συγκρίνειν δύνασαι.',
+ 'metric.ertrag.desc': 'Ὃ ἡ αἵρεσις κατὰ τὴν νῦν ἀξίαν ὑπὲρ τὴν ἰδίαν σου ἐργασίαν ποιεῖ· ἡ ἀξία νῦν πασῶν τῶν καθαρῶν ἀποδόσεων ἄνευ τῆς ἀξίας νῦν τῆς καθαρᾶς χρήσεως.',
+ 'metric.irr.desc': 'Τόκος ἐπὶ τὸ ἀληθῶς τεθὲν καθαρὸν ἀργύριον, κατ᾽ ὄνομα. Συγκρίνεται σὺν τῷ ὡρισμένῳ τόκῳ τῷ ὅλῳ τοῦ ETF — ἡ διαφορὰ ἐστὶν ὅτι δόσις καὶ εἰσφορὰ ἅμα δαπανῶσιν ἢ δίδονται.',
+ 'metric.kapital.desc': 'Πρὸ φόρου καὶ πρὸ εἰσφορᾶς, κατ᾽ ὄνομα. Πρὸς γνώμην οὐκ ἔστιν οὗτος ὁ λόγος· ἡ bAV ἐνταῦθα πλέον πρὸ ἔχειν δύναται, ἀλλὰ ἐν τῇ ἀποδόσει ζημιοῦται.',
+ 'ui.couple': '<span>⇅</span> Δύο εἰς τὸ αὐτὸ μέγεθος βλέπουσιν. Μετάβαλε τὸ ἕν, τὸ ἄλλο ἀκολουθεῖ.',
+ 'ui.legalNote': 'Νόμιμον μέγεθος σὺν τοῦ βιβλίου τόπῳ. Μετάβαλε τοῦτο, εἰ ὁ νόμος μετεβλήθη ἢ ἡ ἀσφάλισίς σου ἄλλως ἔχει.',
+ 'n.beitrag.ueber8': function(p, f){
+ return 'Ὑπὲρ 8 τοῖς ἑκατὸν τοῦ ὅρου τῆς εἰσφορᾶς RV (' + f.eur(p.v8) + ' κατ᾽ ἔτος). Τοῦτο τὸ μέρος '
+ + 'οὔτε φορολογητὸν οὔτε εἰσφοροφόρον ἐστίν — εἰς τὴν ἀσφάλισιν νόσου ἔρχεται καὶ ἐκεῖ οὐδὲν '
+ + 'λαμβάνεται πλὴν τῆς ἀσφαλίσεως νόσου μόνης.'; },
+ 'n.beitrag.ueber4': function(p, f){
+ return 'Ὑπὲρ 4 τοῖς ἑκατὸν τοῦ ὅρου τῆς εἰσφορᾶς RV (' + f.eur(p.v4) + ' κατ᾽ ἔτος). Μέχρι τούτου '
+ + 'ἔχεις τὸ δικαίωμα κατὰ § 1a BetrAVG, ὑπὲρ τούτου δεῖ τῆς τοῦ μισθοδότου συγκαταθέσεως.'; },
+ 'n.agzus.gedeckelt': function(p, f){
+ return 'Ὥρισται ἐπὶ ' + f.pct(p.quote, 1) + '. Ὁ μισθοδότης ἀληθῶς φείδεται ' + f.eur2(p.ersparnis)
+ + ' κατ᾽ ἔτος — μείζονες ἀξίαι ἐνταῦθα οὐδὲν μεταβάλλουσιν, ἕως ὁ τρόπος «κατ᾽ ἀκρίβειαν λελογισμένον» κεῖται.'; },
+ 'n.agz_fix.fliesstNicht': function(p, f){
+ return 'Οὐ γίγνεται· ἡ μηνιαία σου εἰσφορὰ ' + f.eur2(p.beitrag) + ' ὑπὸ τὸν ἐλάχιστον ὅρον '
+ + f.eur2(p.schwelle) + ' ἐστίν (βλέπε «Ἄλλοις λόγοις»).'; },
+ 'n.agz_fix.ueber4': function(p, f){
+ return 'Ἡ ὡρισμένη προσθήκη πᾶσα ὑπὲρ τὸ τῶν 4 % ἀγγεῖον (' + f.eur(p.topf) + ' κατ᾽ ἔτος) '
+ + f.eur(p.ueber) + ' ὑπερβαίνει. Τοῦτο τὸ μέρος σοὶ μισθὸς ἦν ἄν — τὸ παράδειγμα οὐ λογίζεται '
+ + 'τοῦτο τὸ βάρος, καὶ οὕτω τὴν bAV εὐμενέστερον κρίνει.'; },
+ 'n.agz_fix.verdraengung': function(p, f){
+ return 'Πρῶτον πληροῖ τὸ τῶν 4 % ἀγγεῖον· ἐκ τῆς ἰδίας σου εἰσφορᾶς λείπεται ' + f.eur(p.rest)
+ + ' ἄνευ εἰσφορᾶς. Ἡ καθαρά σου χρῆσις οὖν αὔξεται — ἡ δὲ προσθήκη ὅμως δοθὲν ἀργύριόν '
+ + 'ἐστιν, μόνον τὴν ἰδίαν σου εἰσφορὰν μεταβάλλει.'; },
+ 'n.agz_fix.ueber8': 'Ὁμοῦ σὺν τῇ ἰδίᾳ εἰσφορᾷ ὑπὲρ 8 τοῖς ἑκατὸν τοῦ BBG-RV — τοῦτο τὸ ἀνώτατον οὔτε φορολογητὸν οὔτε εἰσφοροφόρον.',
+ 'n.agz_fix_min.knapp': function(p, f){
+ return 'Μόνον ' + f.eur2(p.d) + ' ὑπὲρ τὸν ὅρον εἶ. Ὑπὸ τούτῳ ἡ ὡρισμένη προσθήκη πᾶσα '
+ + 'ἀπόλλυται· ὁ τόκος τοῦ ἐσχάτου € τῆς εἰσφορᾶς ἐνταῦθα ἄδηλός ἐστι, δεσμὸς πᾶς ↔ καθαρὸς '
+ + 'ἐκεῖ ἀβέβαιος.'; },
+ 'n.agz_fix_min.verfehlt': function(p, f){
+ return 'Ὁ ὅρος οὐκ ἐτελέσθη — ' + f.eur2(p.fehlt) + ' πλέον κατὰ μῆνα ' + f.eur2(p.zuschuss)
+ + ' προσθήκην ἂν ἤνεγκεν. Τοῦτο ἀεὶ τὸ κράτιστον € ἐν παντὶ τῷ παραδείγματι.'; },
+ 'n.teilkap.kosten': function(p, f){
+ return 'Κόστος ' + (p.gewinn ? 'οὐδέν, ἀλλά· ' + p.dtxt : p.dtxt + ' ' + p.unit)
+ + ' πρὸς τὸ μέτρον τῆς τοῦ φόρου ἰσότητος. Αἰτία· ἡ μία δόσις ἐν ἑνὶ ἔτει πᾶσα φορολογητή '
+ + 'ἐστιν (ὅρος βάρους ἐκεῖ ' + f.pct(p.grenz, 1) + ') καὶ μετὰ ταῦτα ὁ τόκος μόνον κατὰ τὸν '
+ + 'λόγον τοῦ φόρου γίγνεται, οὐ κατὰ τὸν καρπὸν τοῦ παραδείγματος.'; },
+ 'n.av_auszform.horizont': function(p, f){
+ return 'Ὑπὲρ τοῦτον τὸν ὅρον τῆς συγκρίσεως ἡ εἰσφορὰ ἔτι ' + f.eur(p.rest) + ' ἰσχύει, ἃ '
+ + 'ἐνταῦθα ΟΥ λογίζεται. Ὁ ὡρισμένος ὅρος πᾶσαν κατὰ νόμον σύνταξιν ἀεὶ μειοῖ — ὅστις '
+ + 'γηράσκει, ἐκεῖ κερδαίνει.'; },
+ 'rank.swap': function(p, f){
+ return '<b>Τὰ σημεῖα ἀλλήλοις οὐχ ὁμολογεῖ.</b> Κατὰ τὴν μηνιαίαν ἀπόδοσιν ' + p.a + ' πρὸ '
+ + p.b + ' ἐστίν, κατὰ τὴν νῦν ἀξίαν τοῦ καθαροῦ κέρδους ἄλλως ἔχει. Αἰτία· ἡ ἀξία νῦν σὺν τῷ '
+ + 'πληθωρισμῷ (' + f.pct(p.infl, 2) + ') ἐλαττοῦται, ἡ δὲ μηνιαία ἀπόδοσις σὺν τῷ μετὰ φόρον '
+ + 'τόκῳ τῆς ἀνακαταθέσεως (' + f.pct(p.wiederanl, 2) + ') ἰσχύει. Ὅσῳ πλέον ταῦτα τὰ δύο '
+ + 'διαφέρει, τοσούτῳ κρεῖττον τὸ δοθὲν κεφάλαιον ἵσταται. Πότερον σημεῖον ἰσχύει, ἐπὶ τούτῳ '
+ + 'ἔχεται, εἴτε τιθέναι εἴτε δαπανᾶν βούλει — ἐπὶ τῷ «δαπανᾶν» θὲς τὴν ἀξίαν εἰς «Χρῆσιν τοῦ '
+ + 'ἰδίου ETF-ἀργυρίου», ὥστε ὁ τῆς ἀνακαταθέσεως τόκος εἰς οὐδὲν ἔρχηται.'; },
+ 'warn.unreachable': 'Ἡ καθαρὰ χρῆσις οὐ δύναται τελεσθῆναι — ὑπὲρ τὸν μισθόν σου. Ὥρισται ἡ ἀνωτάτη δυνατὴ ἀξία.',
+ 'warn.inactive': 'Ἐν τῷ πρώτῳ ἔτει κατὰ τοὺς λόγους σου οὐκ εἶ ἐν τῇ ἐργασίᾳ — οὐδεμία μεταβολὴ τοῦ μισθοῦ, οὐδὲ καθαρὰ χρῆσις, δι᾽ ἧς πᾶσα εἰσφορὰ πάλιν λογισθῆναι δύναιτο. Βλέπε «Ἀπαλλαγὴ τοῦ ἔργου» καὶ «Ἡλικία νῦν».',
+ 'verdict.lead': function(p){
+ return '<b>' + p.satz + '</b> πρῶτόν ἐστι σὺν ' + p.wert + ' — ' + p.d2 + ' πλέον ἢ ' + p.nom2
+ + (p.nom3 ? ' καὶ ' + p.d3 + ' πλέον ἢ ' + p.nom3 : '') + '.'; },
+ 'verdict.top': function(p, f){
+ return ' Ὁ πλεῖστος τόπος ἐν τούτῳ τῷ μέτρῳ ' + p.gen + ' πρὸς τὸ ἴδιον ETF-ταμιεῖον ἐστὶ «'
+ + p.label + '» — καὶ ' + (p.pro ? 'πρὸς κέρδος' : 'πρὸς ζημίαν') + ' ' + p.gen + ', σὺν '
+ + f.eur(p.wert) + ' ἀξίᾳ νῦν. Πᾶσα διαίρεσις ὑπὸ τῇ «Διαγνώσει τῆς ἀξίας» κεῖται.'; },
+ 'verdict.band': function(p, f){
+ return '<span class="band">Πόσον βέβαιον τοῦτο; Ἐπὶ παντὶ τόκῳ ' + f.pct(p.lo, 1) + ' μέχρι '
+ + f.pct(p.mid, 1) + ' τοῦτο ' + p.vlo + ' ἦν ἄν, ἐπὶ ' + f.pct(p.hi, 1) + ' ' + p.vhi
+ + ' ἦν ἄν — ἡ διάγνωσις '
+ + (p.stabil ? 'ἐν τούτῳ τῷ μέτρῳ ὁμοία μένει.'
+ : '<b>ἐν τούτῳ τῷ μέτρῳ ἄλλως ἔχει</b>, ἡ διάγνωσις ἐνταῦθα οὐ φέρει.')
+ + '</span>'; },
+ 'demo.text': '<b>Ταῦτα ἔτι παραδείγματος ἀξίαι εἰσίν</b> — 40 ἔτη, 75.000 € κατ᾽ ἔτος μισθὸς ὅλος, 300 € μισθοῦ μεταβολὴ κατὰ μῆνα, ἀσφάλισις νόσου κατὰ νόμον. Σημείωσαι ὑπὸ «Τοῖς σοῖς λόγοις» τὰ σά· αὕτη ἡ μνήμη τότε αὐτὴ γίγνεται.',
+ 'sens.readout': 'Μεμετρημένον· ἡ νῦν σου ἀξία. Κύκλοι· τὸ μέτρον σὺν τῷ ἰδίῳ ἀργυρίῳ. Ἐπὶ ταύτῃ τῇ ὁδῷ φέρου ἢ κίνει πρὸς ἀξίας.',
+ 'sens.note': function(p){
+ return 'Ὁ ἔσχατος κινηθεὶς κανὼν πᾶς διὰ τὸ ἴδιον αὐτοῦ μέτρον λογίζεται — ' + p.n
+ + ' πλήρεις τοῦ παραδείγματος περίοδοι. Νῦν· «' + p.label + '». Κίνησον ἄλλον κανόνα, καὶ ἡ '
+ + 'ὁδὸς σὺν αὐτῷ μεταβάλλεται.'; },
+ 'sens.noteNetto': function(p, f){
+ return ' Σκόπει· ὁ κανὼν καὶ ἡ καθαρὰ χρῆσις μεταβάλλεται (ἐνταῦθα ' + f.eur2(p.lo) + ' μέχρι '
+ + f.eur2(p.hi) + ' κατὰ μῆνα) καὶ οὕτως ἡ ἀξία, ἣ ἐν πάσαις ταῖς τρισὶν αἱρέσεσι τίθεται. '
+ + 'Ἐκεῖ οἱ τρεῖς κύκλοι καθ᾽ ἕκαστον x ὀρθῶς ὅμοιοι γίγνεσθαι δύνανται, ἡ δὲ ὕψωσις σὺν '
+ + 'ἄλλοις x οὔ. Αἱ γωνίαι κεῖνται ἐπὶ τοῖς ὅροις τῆς εἰσφορᾶς (' + f.eur(p.bbgkv) + ' πρὸς '
+ + 'KV/PV, ' + f.eur(p.bbgrv) + ' πρὸς RV/AV) καὶ ἐπὶ τοῖς τοῦ φόρου ὅροις.'; },
+ 'wf.check': function(p, f){
+ return 'Πεῖρα· ' + f.eur(p.start) + ' + ' + f.eur(p.summe) + ' = ' + f.eur(p.start + p.summe)
+ + ' (ἔδει ' + f.eur(p.ende) + ' εἶναι, διαφορὰ ' + f.nf2(p.start + p.summe - p.ende) + ' €).'; },
+ 'wf.note': 'Πᾶν ἀπὸ τοῦ τέλους διαιρεῖται, ὅμως ὀρθῶς λελογισμένον — ἀλλά ἐστιν <b>ἔργον δικαιοσύνης</b>· αἱ δυνάμεις οὐ δύνανται διαχωρισθῆναι, ἑκάστη ῥάβδος μέρος <i>ἁρμόζον</i> τοῖς ὑπὲρ αὐτῆς μετρεῖ. Κίνησον τὴν ῥάβδον πρὸς διάγνωσιν.',
+ 'wfb.vp.note': 'Οὔτε ἡ bAV οὔτε τὸ Altersvorsorgedepot τὴν Vorabpauschale (§ 18 InvStG) γιγνώσκουσιν. Μεμέτρηται ὡς ἴδιον ἀργύριον ἄνευ τε καὶ σὺν τῇ Vorabpauschale. Ἡ ῥάβδος ἐλάττων γίγνεσθαι δύναται· ἡ Vorabpauschale πολὺ εἰς τὸ τῆς φειδοῦς μέρος ἔρχεται, ἀλλὰ πᾶν τὸ κόστος αἴρει ἐκ τῆς ἀρχῆς — καὶ οὕτω πρὸς τὸ ἴδιον ἀργύριον κρεῖττόν ἐστιν.',
+ 'wfb.zul.note': 'Ἀλλότριον ἀργύριον κατὰ τὸ νέον τῆς ἀποδόσεως παράδειγμα καὶ ἀφαίρεσις κατὰ § 10a EStG. Μεμέτρηται τῷ ἀμφοτέρας τὰς ὁδοὺς ἀφεῖναι.',
+ 'wfb.arch.note': 'Ἡ τοῦ φόρου διαφορὰ t₀ − t₁ καὶ τὸ λοιπόν. Τὸ ὑπολειπόμενον ὀρθοῖ, ὥστε ἡ σειρὰ ὀρθῶς γίγνηται.',
+ 'wfb.agz.note': 'Ἀλλότριον ἀργύριον — ἡ μόνη κατασκευὴ ἡ τῆς bAV κρείττων, ἣ οὐκ ἐκ τοῦ νόμου ἔρχεται. Μεμέτρηται τῷ ταύτην τὴν προσθήκην ἀφεῖναι.',
+ 'wfb.tarif.note': 'Ὁ ὅρος τοῦ λόγου τοῦ φόρου ἐπὶ τῇ εἰσφορᾷ ἄνευ τῆς λήψεως, καὶ τὸ λοιπόν. Τὸ ὑπολειπόμενον ὀρθοῖ, ὥστε ἡ σειρὰ ὀρθῶς γίγνηται. Ἡ τοῦ φόρου αὔξησις οὐδέν ἐστιν· (1−t)(1+r)ⁿ = (1+r)ⁿ(1−t), ὁ πολλαπλασιασμὸς τὴν ἀξίαν οὐ μεταβάλλει.',
+ 'wfb.kvpv.note': '§§ 229, 250 SGB V· πάντα τὸν λόγον τῆς εἰσφορᾶς ὁ τῆς εἰσφορᾶς λαβὼν φέρει. Μεμέτρηται ὡς διαφορὰ πρὸς τὴν ὑπόθεσιν «ἡ νόσος αὐτοῦ ἐν τῷ γήρᾳ».',
+ 'wfb.ep.note': 'Ἡ τοῦ μισθοῦ μεταβολὴ τὸν τοῦ μισθοδότου μισθὸν μειοῖ καὶ οὕτω τὴν κατὰ νόμον σύνταξιν. Καθαρῶς λελογισμένον.',
+ 'kap.readout': function(p, f){
+ return 'Ἐν ἀρχῇ τῆς ἀποδόσεως δεδεμένα· bAV ' + f.eur(p.bavGeb) + ' ἐκ ' + f.eur(p.bav)
+ + ' · AV-ταμιεῖον ' + f.eur(p.avGeb) + ' ἐκ ' + f.eur(p.av)
+ + ' · ἴδιον ἀργύριον ' + f.eur(0) + ' ἐκ ' + f.eur(p.priv)
+ + '. Ἡ ἴση μηνιαία ἀπόδοσις λαμβάνεται, ἕως ἑκάστη αἵρεσις εἰς οὐδὲν τελευτᾷ.'; },
+ 'kap.note': function(p, f){
+ return 'Τὸ ἀργύριον ἐν τῷ παραδείγματι κεῖται, ἐν τοῖς χρόνοις τῆς ἀποδόσεως σὺν καθαρῶς '
+ + 'ἀνακατατεθείσαις δόσεσιν αὔξεται (' + f.pct(p.wiederanl, 2) + ' μετὰ φόρον) καὶ ἄνευ '
+ + 'ταύτης τῆς ἴσης μηνιαίας ἀποδόσεως, ἀληθῶς λαμβανόμενον. Ἕκαστη οὖν αἵρεσις ὀρθῶς εἰς '
+ + 'οὐδὲν ἔρχεται. Διότι ἡ λῆψις μόνον ἐκ τῆς ἀνακαταθέσεως ἔρχεται καὶ τὸ κεφάλαιον τοῦ '
+ + 'παραδείγματος ἐν τῷ παραδείγματι λείπεται, ἔνθα σὺν τῷ καρπῷ τοῦ παραδείγματος πρὸ τοῦ '
+ + 'φόρου αὔξεται, οἱ κύκλοι ὅμως οὐχ ὁμοίως χωροῦσιν. — Τοῦτο τὸ ὡρισμένον δίκαιόν ἐστι τὸ '
+ + 'ἐλεύθερον χρώμενον μέρος· ἡ bAV μέχρι τῆς ἀρχῆς τῆς ἀποδόσεως πᾶσα δεδεμένη ἐστίν (ὁ § 1b '
+ + 'BetrAVG δύναμιν ἄφθαρτον δίδωσιν, οὐκ ἐλευθερίαν), τὸ Altersvorsorgedepot πρὸ τῶν 65 ἐτῶν '
+ + 'λαβεῖν ζημία ἐστίν, ἐλεύθερον δὲ μόνον τὸ ἀνώτατον ὑπὲρ τὴν ἀνωτάτην τοῦ ἔτους ἀξίαν, τὸ '
+ + 'ἴδιον ἀργύριον ἀεὶ ἐλεύθερόν ἐστιν. Τοῦτο ἡ μόνη ὁδός ἐστιν, ἔνθα ἡ τοῦ κεφαλαίου δόσις '
+ + 'καλῶς φαίνεται. '
+ + (p.verrentet ? 'Ἐπεὶ σὺ τοῦτο τὸ ἀργύριον εἰς σύνταξιν ἄγεις, ἐκεῖ καὶ τὸ κεφάλαιον τῷ '
+ + 'μισθοδότῃ ἔρχεται — ὁ κύκλος μετὰ ταῦτα ἐλαττοῦται, καὶ εἰ οὐδὲν ἀπόλωλεν. ' : '')
+ + 'Καὶ πάλιν σαφῶς· οἱ κύκλοι τὸ ἴδιον ἐκ ΤΑΥΤΗΣ ΤΗΣ ΜΙΑΣ ὁδοῦ δεικνύουσιν, οὐ πᾶν τὸ ἴδιόν σου.'; },
+ 'zer.readout': 'Πᾶν ὡς ἴση μηνιαία ἀπόδοσις κατὰ τὴν νῦν ἀξίαν. Ἐπεὶ ὀρθῶς ἰσχύει, αἱ διαιρέσεις ὀρθῶς ἅμα λογίζονται.',
+ 'zer.note': function(p, f){
+ return 'Ὁ χρόνος ὅμοιος ἐν πάσαις ταῖς τρισὶν αἱρέσεσιν. Δόσις τοῦ κεφαλαίου οὐκ ἐν δώδεκα '
+ + 'διαιρεῖται, ἀλλὰ σὺν τῷ μετὰ φόρον τόκῳ τῆς ἀνακαταθέσεως (' + f.pct(p.wiederanl, 2)
+ + ' κατ᾽ ἔτος) ἐν τῷ αὐτῷ χρόνῳ δίδοται. Ὅστις τοῦτο τὸ ἀργύριον ἀντὶ τοῦ τιθέναι δαπανᾷ, '
+ + 'χεῖρον ἵσταται.'; },
+ 'det.warn.lead': 'Ἔξω ταύτης τῆς συμβεβουλευμένης ὁδοῦ ἵστασαι· ',
+ 'det.warn.aussch': 'Ὑπὲρ 100 τοῖς ἑκατὸν τῆς χρήσεως οὐδὲν δικαίωμα πρὸς τὴν τοῦ μισθοῦ μεταβολὴν ἔστιν. ',
+ 'det.warn.ngef': 'Τὸ πλεῖστον μέρος τῶν εἰσφορῶν οὔτε φορολογητὸν οὔτε εἰσφοροφόρον ἐστίν — τοῦτο τὸ μέρος εἰς τὴν ἀσφάλισιν νόσου ἔρχεται, ἄνευ λήψεως πλὴν τῆς ἀσφαλίσεως νόσου μόνης. ',
+ 'det.warn.vb': 'Τὸ Versorgungsbezug ὑπὲρ τὴν ἀτέλειαν σαφῶς ἔρχεται· ἡ τῆς ὅλης ἀτελείας φυλακὴ ὡς 1/κεφάλαιον ἐλαττοῦται. ',
+ 'det.ann.intro': 'Αὕτη ἡ διάγνωσις ἐπὶ νομίμοις ζητήμασιν ἔχεται, ἃ ἐν 2026 οὔπω πάντα τετέλεσται. Οἱ ἐν παρενθέσει λογισμοὶ ἴδιαι πίστεις εἰσίν.',
+ 'det.ann.notmodelled': '<b>Οὐ παρίσταται·</b> μείωσις πρὸ τῆς τοῦ γήρως συντάξεως, μεταβολὴ τοῦ μισθοῦ ἐπὶ νόσου, ἀεργίας καὶ τέκνων μισθόν, φροντὶς τῶν ζώντων μετά, ἀδυναμία τῆς πίστεως (PSVaG), μετάβασις πρὸς ἄλλον μισθοδότην, μείωσις διὰ τέκνον ἐν τῇ θεραπείᾳ, καλὴ πεῖρα κατὰ § 32d Abs. 6 EStG, ἀτέλεια θανάτου καὶ βασική, μακροῦ βίου ὑπὲρ τὸν ὅρον.',
+ 'det.prinzip': '<p>Συγκρίνειν <i>πάσας τὰς εἰσφοράς</i> οὐκ ὀρθὸν ἦν ἄν· ἡ τοῦ μισθοῦ μεταβολὴ ἐκ τοῦ ὅλου ἔρχεται, ἡ δὲ ἰδία φειδὼ ἐκ τοῦ καθαροῦ. Οὕτως ἡ <b>καθαρὰ χρῆσις</b> ὅμοια γίγνεται·</p>'
+ + '<p style="font-family:var(--mono);font-size:.82rem;background:var(--chip);padding:9px 11px;border-radius:9px">Καθαρὰ χρῆσις = εἰσφορὰ ὅλη − φειδὼ τοῦ φόρου − μέρος τοῦ μισθοδότου</p>'
+ + '<p>Ἡ αὐτὴ ἀξία ἐν πάσαις ταῖς τρισὶν αἱρέσεσι τίθεται. Τὸ ὑπολειπόμενον σύγκρισίς ἐστι τῶν κατασκευῶν, οὐ τῆς εἰσφορᾶς ὕψος.</p>'
+ + '<p><b>Ἡ τοῦ φόρου αὔξησις οὐδέν ἐστιν·</b> (1−t)·(1+r)ⁿ = (1+r)ⁿ·(1−t). Ὁ πολλαπλασιασμὸς μεταβάλλει. Λείπονται τέσσαρες διαγνώσεις·</p>'
+ + '<ol style="padding-left:1.2em;margin:.3em 0"><li>Ἡ τοῦ φόρου διαφορὰ t₀ − t₁</li>'
+ + '<li>Ἀλλότριον ἀργύριον — προσθήκη τοῦ μισθοδότου ἢ δωρεαί</li>'
+ + '<li>ἀφορολόγητος φυλακή — οὐδεμία Vorabpauschale</li>'
+ + '<li>νέαι εἰσφοραί, αἳ μόνον μίαν αἵρεσιν ἅπτονται — νόσος/θεραπεία ἐπὶ Versorgungsbezüge</li></ol>'
+ + '<p>Ἡ τετάρτη δύναμις ἡ μεγίστη ζημία τῆς bAV ἐστίν, ἡ δὲ δευτέρα κατασκευὴ κρείττων. Ὁ τόκος τῆς bAV <b>ὀρθῶς ἀεὶ σὺν τῷ ὕψει τῆς εἰσφορᾶς ἐλαττοῦται</b>, ἐπεὶ ἡ ἀτέλεια ὅλη ἐστὶ καὶ ἡ φυλακὴ ὡς 1/K ἐλαττοῦται — οὐκ ἔνδον ἡ κρατίστη.</p>'
+ + '<p>Ἐπὶ ὡρισμένῃ καθαρᾷ χρήσει πᾶσα εἰσφορὰ ὀρθῶς πάλιν λογίζεται· τὸ N(B) ἀεὶ καὶ ὀρθῶς αὔξεται (dN/dB = 1 − ὁ ὅρος τοῦ λόγου τῆς εἰσφορᾶς − ὁ ὅρος τοῦ λόγου τοῦ φόρου > 0), ἀλλὰ ἐπὶ ταῖς γωνίαις τῶν 4 καὶ 8 τοῖς ἑκατὸν τοῦ BBG-RV, ἐπὶ τοῖς ὅροις τῆς εἰσφορᾶς καὶ τοῖς τοῦ φόρου ὅροις τὸ τέλος οὐ δύναται πάλιν λογισθῆναι. 34 δικαιώματα ἔλαττον ἢ ἓν τριακοστὸν τέταρτον τοῦ φόρου δίδωσιν.</p>',
+ 'det.s.erg': 'Πᾶσαι αἱ τρεῖς αἱρέσεις ἐν τῇ φειδοῖ ὀρθῶς τὴν αὐτὴν ἀξίαν ἐκ τῆς καθαρᾶς δαπάνης δαπανῶσιν.',
+ 'det.s.mon': 'Πᾶσαι αἱ αἱρέσεις τῷ αὐτῷ χρόνῳ δίδονται, κατὰ τὴν νῦν ἀξίαν. Ἐπεὶ ὀρθῶς ἰσχύει, αἱ ὀρθότητες ὀρθῶς ἅμα λογίζονται.',
+ 'det.s.diag': 'Διὰ τί τοῦτο οὕτως ἔχει — καὶ ποῦ ἔξω ταύτης τῆς συμβεβουλευμένης ὁδοῦ ἵστασαι.',
+ 'msg.linkCopied': 'Ὁ σύνδεσμος ἀντιγράφεται. Ὅστις τοῦτον ἀνοίγει, ὀρθῶς τοῦτον τὸν λογισμὸν ὁρᾷ — οὐδὲν διὰ ἀρχῆς ἔρχεται.',
+ 'msg.linkFailed': 'Ἀντιγράφειν οὐκ ἠδυνήθη. Ὁ σύνδεσμος νῦν ἐν τῷ τοῦ βιβλίου τόπῳ κεῖται.',
+ 'pwa.offline': '<b>Ἐλεύθερον εἶναι δύναται ἄνευ δεσμοῦ.</b> Τοῦτο τὸ πρόγραμμα νῦν ἐν τῇ τῆς ἀρχῆς φυλακῇ κεῖται καὶ ἄνευ κινήσεως γίγνεται. Πρὸς τὸ ἐγκαθιστάναι· ἐν iPhone «Μεταδιδόναι» → «Πρὸς τὴν πρώτην θύραν», ἐν Android τοῦτο τὸ σημεῖον → «Πρόγραμμα ἐγκαθιστάναι».',
+ 'pwa.installAsk': '<b>Ὡς πρόγραμμα ἐγκαθιστάναι;</b> Τότε σὺν ἰδίῳ σημείῳ ἐπὶ τῇ πρώτῃ θύρᾳ κεῖται καὶ ἄνευ κινήσεως γίγνεται. ',
+ 'pwa.declined': 'Καλῶς — τοῦτο τὸ πρόγραμμα καὶ οὕτω γίγνεται, καὶ ἄνευ κινήσεως.',
+ 'pwa.file': '<b>Αὐτὸ τὸ βιβλίον ἀνέῳξας</b> (<kbd>file://</kbd>). Πάντα λογίζεται, πάντα φυλάττεται. Δύο τῆς ἐργασίας πίστεις ἄλλως ἔχουσιν· οὐδὲν σημεῖον ἐπὶ τῇ πρώτῃ θύρᾳ καὶ οὐδεμία φυλακὴ ἄνευ κινήσεως — τοῦτο ἐνταῦθα οὐκ ἐδέησεν ἄν, τὸ βιβλίον ἀεὶ ἐπὶ τούτῳ τῷ ἀργυρίῳ κεῖται. Πρὸς πλήρη τοῦ παραδείγματος πίστιν, θὲς τὸν φάκελον ἐπί τινα HTTPS-τόπον καὶ ἐκεῖθεν ἄνοιγε.'
+};
diff --git a/app/i18n.ja.js b/app/i18n.ja.js
index 914f3f2..746ed0b 100644
--- a/app/i18n.ja.js
+++ b/app/i18n.ja.js
@@ -224,11 +224,9 @@ window.I18N_JA = {
'ui.pin.set': '基準として固定',
'ui.pin.clear': '基準を解除',
'ui.lang': '言語',
- 'ui.lang.de': 'ドイツ語',
- 'ui.lang.en': '英語',
- 'ui.lang.la': 'ラテン語',
- 'ui.lang.ja': '日本語',
'ui.lang.aria': '言語を選ぶ',
+ 'ui.lang.partial': '部分訳のみ',
+ 'ui.lang.partialNote': 'この言語は<b>部分訳</b>です。画面表示・項目名・表の見出し・グラフの凡例は訳してあります。長い法律解説——各項目の <span class="qm" style="cursor:default">?</span> の文、判定、計算過程——はドイツ語で表示されます。条文の出典(BetrAVG、EStG、SGB V)はどの言語でもドイツ語のままです。公式にはドイツ語版しか存在しないためです。',
'sb.up': '結果に戻る',
'footer.1': '<b>税務・投資の助言ではありません。</b>モデルは契約ではありません。改革後の私的老後保障をめぐる2026年の法状況にはまだ確定していない点がいくつもあります。信頼度のもっとも低い仮定は「計算の内訳 → 仮定の頑健性」にまとめてあり、そこで変更もできます。',
'footer.2': '計算部分はExcelモデル <span class="pill">bAV-DYNO_vs_Altersvorsorgedepot_vs_ETF.xlsx</span> をそのまま移植し、3件のテストケースで機械精度まで一致を確認しています(相対誤差の最大は 1.3·10<sup>&minus;14</sup>)。',
diff --git a/app/i18n.la.js b/app/i18n.la.js
index ca113ad..d4b0f64 100644
--- a/app/i18n.la.js
+++ b/app/i18n.la.js
@@ -223,11 +223,9 @@ window.I18N_LA = {
'ui.pin.set': 'Ut normam figere',
'ui.pin.clear': 'Normam solvere',
'ui.lang': 'Lingua',
- 'ui.lang.de': 'Germanice',
- 'ui.lang.en': 'Anglice',
- 'ui.lang.la': 'Latine',
- 'ui.lang.ja': 'Iaponice',
'ui.lang.aria': 'Linguam eligere',
+ 'ui.lang.partial': 'ex parte tantum conversa',
+ 'ui.lang.partialNote': 'Haec lingua <b>ex parte conversa</b> est: facies, nomina camporum, capita tabularum, indices diagrammatum adsunt. Longae explicationes iuridicae — textus <span class="qm" style="cursor:default">?</span> ad campos, iudicium, ratio computandi — Germanice apparent. Locorum citationes (BetrAVG, EStG, SGB V) in omni lingua Germanicae manent: publice aliter non exstant.',
'sb.up': 'Sursum ad exitum',
'footer.1': '<b>Non est consilium tributarium neque de collocando.</b> Exemplar non est contractus. Ius anni 2026 de provisione privata reformata pluribus locis nondum certum est; suppositiones minimae fidei sub „Ratio computandi → Firmitas suppositionum“ stant et ibi mutari possunt.',
'footer.2': 'Nucleus computandi ad litteram ex exemplari Excel <span class="pill">bAV-DYNO_vs_Altersvorsorgedepot_vs_ETF.xlsx</span> translatus et tribus casibus ad praecisionem machinae probatus (maxima discrepantia relativa 1,3·10<sup>&minus;14</sup>).',
diff --git a/app/i18n.nds.js b/app/i18n.nds.js
new file mode 100644
index 0000000..ccc533f
--- /dev/null
+++ b/app/i18n.nds.js
@@ -0,0 +1,584 @@
+/* =====================================================================
+ Plattdüütsch Wöörbook — VULLSTÄNNIG (459 Slötels).
+ De Gesettsteed’n staht mit Vördacht op Hoochdüütsch: dat sünd de
+ Hööftquellen un se hebbt keen amtliche Översetten. Plattdüütsch hett
+ keen Rechtssprook — dorüm blievt Fachwöör faken nah an’t Hoochdüütsche,
+ en frei utdachte Fachsprook weer hier leger as dat Original.
+ Schriefwies na Sass, dorüm <dd> as Längeteken un keen ß.
+ ===================================================================== */
+window.I18N_NDS = {
+ 'f.I:gehalt.label': 'Johresbrutto vandaag',
+ 'f.I:beitrag.label': 'Maandbidrag bAV brutto',
+ 'f.I:netto_ziel.label': 'Maandlich Nettoutgaav',
+ 'f.I:agzus.label': 'Toschuss vun’n Baas',
+ 'f.I:agz_fix.label': 'Fast Toschuss dortoböverhen',
+ 'f.I:agz_fix_dyn.label': 'Fasten Toschuss dynamiseern',
+ 'f.I:agz_fix_dyn.o0': 'nominaal liek',
+ 'f.I:agz_fix_dyn.o1': 'mit dat Gehalt',
+ 'f.I:agzus_sv.label': 'Toschuss-Aart',
+ 'f.I:agzus_sv.o0': 'hele Bidrag',
+ 'f.I:agzus_sv.o1': 'bloots de fre’e Deel',
+ 'f.I:agzus_sv.o2': 'nipp un nau reekt',
+ 'f.I:dyn.label': 'Bidrag dynamiseern',
+ 'f.I:dyn.o1': 'mit dat Gehalt',
+ 'f.I:dyn.o0': 'nominaal liek',
+ 'f.I:rendite.label': 'Bruttorendit ETF in’t Johr',
+ 'f.I:alter.label': 'Öller vandaag',
+ 'f.I:alter.unit': 'Johr',
+ 'f.I:rentbeg.label': 'Anfang vun de Utbetahlen',
+ 'f.I:rentbeg.unit': 'Johr',
+ 'f.I:kv_ruhe.label': 'Krankenkass in’n Ruhestand',
+ 'f.I:kv_ruhe.o1': 'gesettlich',
+ 'f.I:kv_ruhe.o2': 'privaat',
+ 'f.I:auszform.label': 'bAV-Utbetahlen',
+ 'f.I:auszform.o1': 'Kapitaal',
+ 'f.I:auszform.o2': 'Rent för’t hele Leven',
+ 'f.I:teilkap.label': 'Altersvorsorgedepot: Eenmalbedrag an’n Anfang',
+ 'f.I:av_auszform.label': 'Altersvorsorgedepot: de Rest',
+ 'f.I:av_auszform.o1': 'Utbetahlensplaan',
+ 'f.I:av_auszform.o2': 'Rent för’t hele Leven',
+ 'f.I:agz_fix_min.label': 'Minnst-Egenbidrag för den fasten Toschuss',
+ 'f.I:rentfak_av.label': 'Rentfaktor Altersvorsorgedepot',
+ 'f.I:rentfak_av.unit': '€ op 10.000 €',
+ 'f.I:rentdyn_av.label': 'Dynamik vun de Depotrent in’t Johr',
+ 'f.I:rentfak.label': 'Rentfaktor bAV',
+ 'f.I:rentfak.unit': '€ op 10.000 €',
+ 'f.I:rentdyn.label': 'Dynamik vun de bAV-Rent in’t Johr',
+ 'f.I:fuenftel.label': 'Föfftelregel pröven',
+ 'f.I:fuenftel.o0': 'nee (vörsichtig)',
+ 'f.I:fuenftel.o1': 'jo',
+ 'f.I:planende.label': 'Verglieksenn bit to’n Öller',
+ 'f.I:planende.unit': 'Johr',
+ 'f.I:ausscheid.label': 'Utscheden ut den Job',
+ 'f.I:ausscheid.unit': 'Johr',
+ 'f.I:tzalter.label': 'Deeltiet vun’t Öller af',
+ 'f.I:tzalter.unit': 'Johr',
+ 'f.I:tzfaktor.label': 'Deeltietfaktor',
+ 'f.I:gsteig.label': 'Gehalts- un Loonstiegen in’t Johr',
+ 'f.I:stkl.label': 'Veranlagen',
+ 'f.I:stkl.o1': 'enkel',
+ 'f.I:stkl.o3': 'tosamen (Splitten)',
+ 'f.I:partner.label': 'Steuerinkamen vun’n Partner',
+ 'f.I:kist.label': 'Karkensteuersatz',
+ 'f.I:tarifanp.label': 'Anpassen vun de Tarifeckwarten in’t Johr',
+ 'f.I:kinder.label': 'Tall vun de Kinner',
+ 'f.I:kind_jahre.label': 'Johren mit Kinnertolaag',
+ 'f.I:kind_jahre.unit': 'Johr',
+ 'f.I:kinderlos.label': 'Ahn Kinner (Plegtoslag)',
+ 'f.I:kinderlos.o0': 'nee',
+ 'f.I:kinderlos.o1': 'jo',
+ 'f.I:k_bav.label': 'Kösten bAV-Produkt in’t Johr',
+ 'f.I:k_av.label': 'Kösten Altersvorsorgedepot in’t Johr',
+ 'f.I:k_priv.label': 'Kösten privaat ETF-Depot in’t Johr',
+ 'f.I:infl.label': 'Inflatschoon in’t Johr',
+ 'f.I:sonst_zve.label': 'anner Steuerinkamen in’n Ruhestand',
+ 'f.I:rente_br.label': 'gesettlich Bruttorent in’t Johr',
+ 'f.P:bbg_rv.label': 'Bidragsgrenz Rentenversekern (johrlich)',
+ 'f.P:bbg_kv.label': 'Bidragsgrenz Kranken-/Plegversekern',
+ 'f.P:bezug.label': 'Bezugsgröße (maandlich)',
+ 'f.P:de_rv.label': 'Dörsnittsloon RV',
+ 'f.P:rw.label': 'Aktuell Rentwart',
+ 'f.P:rw.unit': '€',
+ 'f.P:rv_an.label': 'RV-Bidrag, Deel vun’n Arbeidnehmer',
+ 'f.P:av_an.label': 'AV-Bidrag, Deel vun’n Arbeidnehmer',
+ 'f.P:kv_allg.label': 'KV allgemeen Bidragssatz',
+ 'f.P:kv_zus.label': 'KV dörsnittlich Tosatzbidrag',
+ 'f.P:pv_ges.label': 'PV Gesamtbidragssatz',
+ 'f.P:pv_an.label': 'PV Deel vun’n Arbeidnehmer',
+ 'f.P:pv_kl.label': 'PV Toslag för Lüüd ahn Kinner',
+ 'f.P:gfb.label': 'Grundfrisbedrag (Enn Zone 1)',
+ 'f.P:e2.label': 'Enn Zone 2',
+ 'f.P:e3.label': 'Enn Zone 3',
+ 'f.P:e4.label': 'Anfang Zone 5 (Rieklüüdsteuer)',
+ 'f.P:a2.label': 'Koeffizient a₂',
+ 'f.P:b2.label': 'Koeffizient b₂',
+ 'f.P:a3.label': 'Koeffizient a₃',
+ 'f.P:b3.label': 'Koeffizient b₃',
+ 'f.P:c3.label': 'Konstante c₃',
+ 'f.P:c4.label': 'Konstante c₄',
+ 'f.P:c5.label': 'Konstante c₅',
+ 'f.P:soli.label': 'Solidaritätstoslag',
+ 'f.P:soli_fg.label': 'Soli-Frigrenz',
+ 'f.P:soli_mz.label': 'Mildernzone Grenzbelasten',
+ 'f.P:an_pausch.label': 'Arbeidnehmer-Pauschbedrag',
+ 'f.P:sa_pausch.label': 'Sünnerutgaven-Pauschbedrag',
+ 'f.P:kapst.label': 'Afgeltensteuersatz',
+ 'f.P:tfs.label': 'Deelfristellen Aktienfonds',
+ 'f.P:sparerpb.label': 'Sparer-Pauschbedrag',
+ 'f.P:basiszins.label': 'Basiszins Vorabpauschale',
+ 'f.P:vp_faktor.label': 'Faktor för den Basisertrag',
+ 'f.P:st_frei_q.label': 'steuerfri § 3 Nr. 63 (Deel BBG-RV)',
+ 'f.P:sv_frei_q.label': 'sozialafgavenfri (Deel BBG-RV)',
+ 'f.P:zul_g1.label': 'Tolaag Stuuf 1 (op elk € Egenbidrag)',
+ 'f.P:zul_s1.label': 'Grenz Stuuf 1',
+ 'f.P:zul_g2.label': 'Tolaag Stuuf 2 (op elk € Egenbidrag)',
+ 'f.P:zul_s2.label': 'Grenz Stuuf 2',
+ 'f.P:kind_zul.label': 'Kinnertolaag op elk Kind',
+ 'f.P:av_max.label': 'Hööchstbedrag Inbetahlen in’t Johr',
+ 'f.P:av_sa_max.label': 'Hööchstbedrag Sünnerutgavenaftog § 10a',
+ 'f.P:ertragsq.label': 'Ertragsdeel (Öller 67)',
+ 'f.P:halb.label': 'steuerplichtig Deel vun’n Ünnerscheedsbedrag',
+
+ /* ---------------- Rahmen, Finstertiteln ---------------- */
+ 'app.title': 'Öllersvörsorg-Verglieks',
+ 'hdr.title': 'Öllersvörsorg&#8209;Verglieks',
+ 'win.header': 'Öllersvörsorg-Verglieks',
+ 'win.result': 'Resultaat',
+ 'win.input': 'Ehr Angaven',
+ 'win.chart': 'Diagrammen',
+ 'win.extra': 'Wiedere Angaven',
+ 'win.calc': 'Reekweg',
+ 'win.share': 'Sekern un wiedergeven',
+ 'win.min': 'Lütt maken',
+ 'win.restore': 'Wedderherstellen',
+ 'win.n': function(p){ return 'Finster ' + p.n; },
+ 'ui.share': 'Link mit mien Tallen kopeern',
+ 'ui.export': 'As Datei sekern',
+ 'ui.import': 'Datei laden',
+ 'ui.reset': 'Allens torüchsetten',
+ 'ui.pin.set': 'As Referenz marken',
+ 'ui.pin.clear': 'Referenz lösen',
+ 'ui.lang': 'Sprook',
+ 'ui.lang.aria': 'Sprook utsöken',
+ 'ui.lang.partial': 'bloots deelwies översett',
+ 'ui.lang.partialNote': 'Disse Sprook is <b>deelwies översett</b>: Böverflach, Feldnaams, Tabellenköpp un Diagrammlegenden sünd dor. De langen juristischen Verkloren — de <span class="qm" style="cursor:default">?</span>-Texten an de Felder, dat Fazit un de Reekweg — staht op Hoochdüütsch. De Gesettsteed’n (BetrAVG, EStG, SGB V) sünd in elk Sprook hoochdüütsch: amtlich gifft dat se bloots so.',
+ 'sb.up': 'Na baven to’t Resultaat',
+
+ /* ---------------- De dree Mööglichkeiten ---------------- */
+ 'opt.bav.name': 'bAV (Entgeltümwannelen)',
+ 'opt.bav.short': 'bAV',
+ 'opt.bav.nom': 'de bedrieflich Öllersvörsorg',
+ 'opt.bav.satz': 'De bedrieflich Öllersvörsorg',
+ 'opt.bav.gen': 'vun de bAV',
+ 'opt.av.name': 'Altersvorsorgedepot',
+ 'opt.av.short': 'AV-Depot',
+ 'opt.av.nom': 'dat Altersvorsorgedepot',
+ 'opt.av.satz': 'Dat Altersvorsorgedepot',
+ 'opt.av.gen': 'vun’t Altersvorsorgedepot',
+ 'opt.priv.name': 'privaat ETF-Depot',
+ 'opt.priv.short': 'privaat',
+ 'opt.priv.nom': 'dat private ETF-Depot',
+ 'opt.priv.satz': 'Dat private ETF-Depot',
+ 'opt.priv.gen': 'vun’t private ETF-Depot',
+
+ /* ---------------- Kenntallen ---------------- */
+ 'metric.monat.label': 'Maandleisten',
+ 'metric.monat.unit': '€/Maand',
+ 'metric.ertrag.label': 'Netto-Ertrag (Barwart)',
+ 'metric.ertrag.unit': '€',
+ 'metric.irr.label': 'Inner Tinsfoot',
+ 'metric.irr.unit': '% in’t Johr',
+ 'metric.kapital.label': 'Kapitaal bi’n Rentanfang',
+ 'metric.kapital.unit': '€',
+ 'metric.pa': ' in’t Johr',
+ 'metric.pp': ' Pp.',
+ 'metric.short.monat': 'Maand',
+ 'metric.short.ertrag': 'Ertrag',
+ 'metric.short.irr': 'IRR',
+ 'metric.short.kapital': 'Kapitaal',
+
+ /* ---------------- Ingaavfelder, Rahmenwark ---------------- */
+ 'unit.pct': '%',
+ 'unit.eur': '€',
+ 'unit.eurm': '€/Maand',
+ 'ui.hintFor': function(p){ return 'Verkloren to: ' + p.label; },
+ 'ui.cnt.legal': function(p){ return p.n + ' Reekgrötten'; },
+ 'ui.cnt.fields': function(p){ return p.n + ' Felder'; },
+ 'group.bav': 'Toschuss un Utbetahlensformen in’t Enkelte',
+ 'group.person': 'Tietass, Utscheden, Deeltiet',
+ 'group.steuer': 'Steuer, Veranlagen, Kinner',
+ 'group.markt': 'Kösten un Inflatschoon',
+ 'group.ruhe': 'Ruhestand',
+ 'group.p_sv': 'Reekgrötten: Sozialversekern 2026',
+ 'group.p_est': 'Reekgrötten: Inkamensteuertarif 2026 (§ 32a EStG)',
+ 'group.p_kap': 'Reekgrötten: Kapitaalertrag- un Investmentsteuer',
+ 'group.p_bav': 'Reekgrötten: bedrieflich un förderte private Vörsorg',
+
+ /* ---------------- Resultaatkoorten ---------------- */
+ 'card.lead': 'vörn',
+ 'card.unchanged': 'nich ännert',
+ 'base.pinned': 'Δ gegen den markten Stand',
+ 'base.delta': function(p){ return 'Δ ' + p.desc; },
+ 'base.none': 'Beweegt een Regler — de Ännern kummt hier as Δ.',
+ 'base.desc.prev': 'vörigen Stand',
+ 'base.desc.pinned': 'markten Stand',
+ 'base.desc.change': function(p){ return 'vör de Ännern vun „' + p.label + '“'; },
+ 'verdict.pp': function(p){ return p.v + ' Prozentpunkten'; },
+
+ /* ---------------- Mitloopen Balken ---------------- */
+ 'sb.cap': function(p){ return p.label + ' · ' + p.unit + (p.kaufkraft ? ', hüdige Koopkraft' : ''); },
+ 'sb.aria': function(p){ return 'Resultaat: ' + p.label; },
+
+ /* ---------------- Diagrammen ---------------- */
+ 'tab.sens': 'Sensitivität',
+ 'tab.wf': 'Wartdrievers',
+ 'tab.kap': 'Kapitaalverloop',
+ 'tab.zer': 'Maandtoleggen',
+ 'chart.error': function(p){ return 'Diagramm lett sik nich wiesen: ' + p.msg; },
+ 'sens.legendY': function(p){ return 'y: ' + p.label + ' (' + p.unit + ')'; },
+ 'wf.up': 'höövt den Ertrag',
+ 'wf.down': 'sackt den Ertrag',
+ 'wf.legend': 'Barwart vun’n Netto-Ertrag, hüdige Koopkraft',
+ 'wf.barinfo': function(p){ return p.label + ': ' + p.note; },
+ 'wfb.vp.label': 'Wegfall vun de Vorabpauschale',
+ 'wfb.zul.label': 'Tolagen un Sünnerutgavenaftog',
+ 'wfb.arch.label': 'Besteuernsarchitektuur (Rest)',
+ 'wfb.agz.label': 'Toschuss vun’n Baas',
+ 'wfb.tarif.label': 'Tarifarbitraag un Rest',
+ 'wfb.kvpv.label': 'KV/PV op Versorgungsbezüge',
+ 'wfb.ep.label': 'Verlust an Entgeltpunkten',
+ 'kap.rentbeg': 'Rentanfang',
+ 'kap.swap': 'Kapitaal → Rentanspröök',
+ 'kap.legend': 'dörgahn: tosamen &nbsp;·&nbsp; streekt: fri to bruken',
+ 'zer.netto': 'netto',
+ 'zer.tax': 'Steuer',
+ 'zer.kv': 'KV/PV',
+ 'zer.pension': 'Rent',
+ 'zer.legend': '<span><i style="background:#808080"></i>Steuer</span><span><i style="background:#800000"></i>KV/PV</span><span><i style="background:#800080"></i>verlaren gesettlich Rent</span><span style="margin-left:auto">bunt Sockel = wat överbliff</span>',
+
+ /* ---------------- Reekweg ---------------- */
+ 'det.h.bav': 'bAV',
+ 'det.h.av': 'AV-Depot',
+ 'det.h.priv': 'privaat',
+ 'det.h.kennzahl': 'Kenntall',
+ 'det.h.wert': 'Wart',
+ 'det.erg.netto': 'Summ inbetahlt ut dat Netto (nominaal)',
+ 'det.erg.fremd': 'Fremdgeld (Toschuss oder Tolagen)',
+ 'det.erg.kapital': 'Kapitaal bi’n Anfang vun de Utbetahlen',
+ 'det.erg.brutto': 'Summ Bruttoutbetahlen',
+ 'det.erg.steuer': 'dorvun Inkamen-/Afgeltensteuer',
+ 'det.erg.kvpv': 'dorvun Kranken- un Plegversekern',
+ 'det.erg.rentenverlust': 'Verlust an gesettlich Rent (opsammelt)',
+ 'det.erg.nettoausz': 'Summ Netto-Utbetahlen (nominaal)',
+ 'det.erg.bwausz': 'Barwart vun de Netto-Utbetahlen',
+ 'det.erg.bwaufw': 'Barwart vun de Nettoutgaav',
+ 'det.erg.ertrag': 'Barwart vun’n Netto-Ertrag',
+ 'det.erg.verhaeltnis': 'Verhältnis Ertrag to Utgaav',
+ 'det.erg.irr': 'Inner Tinsfoot (nominaal)',
+ 'det.erg.vorsprung': 'Vörsprung gegen dat private Depot',
+ 'det.mon.brutto': 'Bruttoleisten in’n Maand',
+ 'det.mon.steuer': 'minus Inkamen-/Afgeltensteuer',
+ 'det.mon.kvpv': 'minus Kranken- un Plegversekern',
+ 'det.mon.ep': 'minus Verlust an gesettlich Rent',
+ 'det.mon.netto': 'NETTO IN’N MAAND (hüdige Koopkraft)',
+ 'det.diag.beitrag': 'Bruttobidrag bAV in’n Maand',
+ 'det.diag.aufwand': 'Nettoutgaav in’n Maand (eerst Johr)',
+ 'det.diag.grenzsteuer': 'Grenzsteuersatz in de Sparphaas (eerst Johr)',
+ 'det.diag.ersparnis': 'Spoorquot tosamen (Steuer + SV), eerst Johr',
+ 'det.diag.svAG': 'wohrhaftig SV-Spoorn vun’n Baas',
+ 'det.diag.svAN': 'wohrhaftig SV-Spoorn vun’n Arbeidnehmer',
+ 'det.diag.ngef': 'Deel vun de bAV-Bidrääg ahn Förderung (eerst Johr)',
+ 'det.diag.aussch': 'Utnutten vun’n Rechtsanspröök (4 % BBG-RV)',
+ 'det.diag.agzVar': 'dorvun Baastoschuss: prozentual (eerst Johr)',
+ 'det.diag.agzFix': 'dorvun Baastoschuss: fast Bedrag (eerst Johr)',
+ 'det.diag.agzFixUeber4': 'fast Toschuss över den 4-%-Putt (nich as Bidragslast reekt)',
+ 'det.diag.vbMonat': 'Versorgungsbezug in’n Maand bi’n Anfang vun de Utbetahlen',
+ 'det.diag.freibetrag': 'Frisbedrag Versorgungsbezüge in’t sülvige Johr',
+ 'det.diag.vbQuote': 'Verhältnis Versorgungsbezug to Frisbedrag',
+ 'det.diag.kapFreiKapital': 'bidragsfri mööglich Kapitaal (Kapitaalutbetahlen)',
+ 'det.diag.kapFreiRente': 'bidragsfri mööglich Kapitaal (Rent för’t hele Leven)',
+ 'det.diag.memoRest': 'MEMO: bAV-Rentbetahlen na dat Enn',
+ 'det.diag.memoRestAv': 'MEMO: Depotrent na dat Enn',
+ 'det.diag.wiederanl': 'Wedderanlaagtins na Steuern',
+ 'det.diag.kapstEff': 'effektiv Afgeltensteuer mit Soli/Karkensteuer',
+ 'det.diag.bestAnteil': 'Besteuernsdeel vun de gesettlichen Rent',
+ 'det.anspar.h.jahr': 'Johr',
+ 'det.anspar.h.brutto': 'Brutto',
+ 'det.anspar.h.beitrag': 'bAV-Bidrag',
+ 'det.anspar.h.agzVar': 'Baastosch. %',
+ 'det.anspar.h.agzFix': 'Baas fast',
+ 'det.anspar.h.sv': 'SV-Spoorn',
+ 'det.anspar.h.st': 'Steuer-Spoorn',
+ 'det.anspar.h.netto': 'Nettoutgaav',
+ 'det.anspar.h.zul': 'Tolagen',
+ 'det.anspar.h.kbav': 'Kapitaal bAV',
+ 'det.anspar.h.kav': 'Kapitaal AV',
+ 'det.anspar.h.kpriv': 'Kapitaal privaat',
+ 'det.row.year': function(p){ return p.jahr + ' (Öller ' + p.alter + ')'; },
+ 'det.ausz.h.jahr': 'Johr',
+ 'det.ausz.h.bavBr': 'bAV brutto',
+ 'det.ausz.h.kvpv': 'KV/PV',
+ 'det.ausz.h.steuer': 'Steuer',
+ 'det.ausz.h.mind': 'Rentminnern',
+ 'det.ausz.h.bavNet': 'bAV netto',
+ 'det.ausz.h.avBr': 'AV brutto',
+ 'det.ausz.h.avNet': 'AV netto',
+ 'det.ausz.h.privBr': 'privaat brutto',
+ 'det.ausz.h.privNet': 'privaat netto',
+ 'det.ann.h.annahme': 'Annahm',
+ 'det.ann.h.vertrauen': 'Vertroen',
+ 'det.ann.h.anmerkung': 'Anmarken',
+ 'det.ann.r1.a': 'Reekgrötten SV 2026, § 32a-Tarif 2026',
+ 'det.ann.r1.c': 'SVBezGrV 2026, Steuerfortentwicklungsgesetz',
+ 'det.ann.r2.a': 'KV/PV-Plicht op Versorgungsbezüge',
+ 'det.ann.r2.c': '§§ 229, 250 SGB V',
+ 'det.ann.r3.a': 'Frisbedrag § 226 Abs. 2 S. 2 SGB V (KV)',
+ 'det.ann.r3.c': 'nich striedig',
+ 'det.ann.r4.a': 'Frigrenz ansteed Frisbedrag in de PV',
+ 'det.ann.r4.c': 'de gängigste Fehler in Ratgevertexten',
+ 'det.ann.r5.a': 'Bidragsfriheit vun de AV-Depot-Utbetahlen',
+ 'det.ann.r5.c': 'keen Versorgungsbezüge',
+ 'det.ann.r6.a': 'halv Ünnerscheedsbedrag för nich förderte Schichten',
+ 'det.ann.r6.c': '§ 22 Nr. 5 S. 2 Buchst. b i.V.m. § 20 Abs. 1 Nr. 6 S. 2 EStG',
+ 'det.ann.r7.a': 'Toschuss bloots bit to’t wohrhaftige Spoorn vun’n Baas',
+ 'det.ann.r7.c': 'de Gegenmenen lest de 15 % as blote Pauschaal',
+ 'det.ann.r8.a': 'Sünnerutgaven-Hööchstbedrag 2.340 €',
+ 'det.ann.r8.c': 'MODELLANNAHM. Beslutt, of en Kind den Wart vun’t AV-Depot höövt oder sackt',
+ 'det.ann.r9.a': 'KVdR-Plichtversekern in’n Ruhestand annahmen',
+ 'det.ann.r9.c': 'friwillig Versekerte nich pröövt',
+ 'det.t.prinzip': 'Dat Vergliekensprinzip',
+ 'det.t.erg': 'Resultaat in’t Enkelte',
+ 'det.t.mon': 'Maandleisten, opdeelt',
+ 'det.t.diag': 'Diagnoos',
+ 'det.t.anspar': 'Sparphaas, Johr för Johr',
+ 'det.t.ausz': 'Utbetahlensphaas, Johr för Johr',
+ 'det.t.ann': 'Belastborkeit vun de Annahmen',
+
+ /* ---------------- Sekern un wiedergeven ---------------- */
+ 'msg.loaded': 'Laden.',
+ 'msg.loadError': function(p){ return 'De Datei leet sik nich lesen: ' + p.msg; },
+ 'msg.reset': 'Torüchsett op den Basisfall.',
+
+ /* ---------------- PWA ---------------- */
+ 'pwa.installBtn': 'Installeern',
+ 'pwa.installed': '<b>Installeert.</b> Ji finnt de App nu bi ju annern Apps.',
+
+ /* ---------------- Verkloren an de Felder (?) ---------------- */
+ 'f.I:gehalt.hint': 'Ahn Eenmalbetahlen, wenn nödig mit den antelligen Deel vun dat 13. Gehalt. Bestimmt Ehrn Grenzsteuersatz un of Ji över de Bidragsgrenzen liggt.',
+ 'f.I:beitrag.hint': 'Brutto-Entgeltümwannelen na § 1a BetrAVG. En Rechtsanspröök gifft dat bloots bit 4 % vun de Bidragsgrenz RV, dorbaven bruukt dat de Tostimmen vun’n Baas.',
+ 'f.I:netto_ziel.hint': 'De Bedrag, üm den Ehr verfögbaar Inkamen in’t eerste Johr sackt — de wohrhaftig opgeven Konsum un dorüm de ökonomisch richtige Entscheedensgrött. Nau disse Bedrag ward in all dree Mööglichkeiten investeert; dat is de Bedingen för’n fair Verglieks. He hangt eendüdig an’n Bruttobidrag dorbaven: N(B) = B − SV-Spoorn − Steuer-Spoorn is streng monoton wassen, also ümkehrbaar. Sluten geiht dat wegen de Knicken bi de Bidragsgrenzen un de Tarifeckwarten nich, dorüm 34 Halveern — Genauigkeit ünner een Teihndel Cent.',
+ 'f.I:agzus.hint': 'Gesettlich Minimum 15 % (§ 1a Abs. 1a BetrAVG); völe Baasen betahlt mehr. Break-even gegen dat private Depot ungefähr dor, wo (1+z)·(1−0,211) ≈ 1, also z ≈ 26,7 % — kannst mit de Sensitivitätskurv nakieken. In’n Toschuss-Modus „nipp un nau“ is disse Wart faken heel nich to bereken, wiel de Toschuss vörher sattigt.',
+ 'f.I:agz_fix.hint': 'Bedrag-ünafhangig fast Toschuss ut Tarifvertrag oder Bedrievsvereenbaren — bi de Deutsche Bahn un in völe Tarifwarken bruuklich, dor tosätzlich to de 15 % na § 1a Abs. 1a BetrAVG. He is en vun’n Baas finanzeerte Gaav na § 3 Nr. 63 EStG un füllt den 8-%-Putt un de 4-%-Bidragsfriheit (§ 1 Abs. 1 S. 1 Nr. 9 SvEV) VÖRRANGIG: Ehr egen Ümwannelen ward tosprekend verdrängt un dürer. Ökonomisch is he en Sockel, keen Hevel: de Grenzrendit vun Ehrn nächsten Bidrags-Euro ännert he nich (∂²Ertrag/∂agz_fix ∂Bidrag ≤ 0, dör de Verdrängen kann he se sogor sacken), den Dörsnitt höövt he stark. In de Sensitivitätskurv is he dorüm bi’n weg af affin — bit de 4-%- oder 8-%-Putt vertehrt is, denn knickt se.',
+ 'f.I:agz_fix_dyn.hint': 'Faste Bedrääg staht meist nominaal in’n Tarifvertrag un ward bloots bi Tarifrunnen höövt — vöreenstellt dorüm „nominaal liek“. Över 27 Johr bi 2 % Inflatschoon bliff dorvun de Faktor 1,02⁻²⁷ ≈ 0,59 över; wer dat to pessimistisch find, schallt op „mit dat Gehalt“ un kriggt en reell Toschuss mit Wassenrat gsteig − infl.',
+ 'f.I:agzus_sv.hint': '„Nipp un nau“ is de Gesettswoortloot: § 1a Abs. 1a BetrAVG schuldt den Toschuss bloots, SOWIET de Baas wohrhaftig Sozialafgaven spoort. Liggt Ehr Entgelt över beide Bidragsgrenzen, spoort he nix un schuldt nix. Dorüm sattigt de Regler dorbaven in’n Basisfall bi ümmer 21 %. „Hele Bidrag“ is en friwillig oder tarifliche Tosaag, „bloots de fre’e Deel“ de wiedverbreedte pauschale Praxis. Vertroensgraad vun de nippe Lesoort ca. 75 %.',
+ 'f.I:dyn.hint': 'Stiggt de Bidrag mit de Gehaltsstiegen, bliff dat Utnutten vun’n 8-%-Putt över de Johren ungefähr liek. Bliff he nominaal liek, sackt sien reell Wart mit de Inflatschoon — un de Nettoutgaav, de de beiden annern Mööglichkeiten to’n Verglieks kriegt, sackt mit.',
+ 'f.I:rendite.hint': 'Vör Kösten, vör Steuern. In all dree Mööglichkeiten de sülvige ETF — bloots so vergliekt man Förderarchitekturen un nich Investeensentscheedens.',
+ 'f.I:alter.hint': 'Anfangspunkt vun de Sparphaas. Kalennerjohr 0 = 2026.',
+ 'f.I:rentbeg.hint': 'Anfang vun de Utbetahlensphaas vun all dree Mööglichkeiten. Dat Altersvorsorgedepot is fröhest vun 65 af to betahlen (Reform 2026).',
+ 'f.I:kv_ruhe.hint': 'De utslaggevende Hevel. In de gesettliche Krankenkass sünd Bedrievsrenten Versorgungsbezüge un dregt den hele Bidragssatz (§§ 229, 250 SGB V); private Öllersvörsorg nich. Bloots disse Instellen dreiht dat Resultaat üm.',
+ 'f.I:auszform.hint': 'Kapitaal: in’t Tofloot-Johr vullens steuerplichtig, KV-Bidrääg op 120 Maanden verdeelt (§ 229 Abs. 1 S. 3 SGB V). De Rent streckt dat Betahlen op de Restlevenstiet un schirmt dorüm en Veelfach an Kapitaal ünner den sülvigen Frisbedrag. Dat Modell kennt bloots heel oder gor nich; en Deelkapitaliseren vun de bAV is nich modelleert.',
+ 'f.I:teilkap.hint': 'Bit 30 % vun dat sparte Kapitaal sünd an’n Anfang vun de Utbetahlensphaas as Eenmalbedrag mööglich — in beide Utbetahlensformen. He köst ut twee Grünn: hele Progression in’t Tofloot-Johr un denn bloots noch de Tinssatz na Afgeltensteuer. De Överschuss över den Johreshööchstbedrag („Sleeve“) ward ahn Eenmalbedrag verrent; dat is en Modellkonvention, keen Rechtsregel.',
+ 'f.I:av_auszform.hint': 'Wat mit dat Kapitaal achter dat Eenmalbedrag passeert — ünafhangig vun de bAV-Entscheeden dorbaven. Utbetahlensplaan: dat Geld bliff investeert un ward mit Tinsen entnahmen; de nich förderte Schicht ward mit den halven Ünnerscheedsbedrag besteuert. Rent för’t hele Leven: dat Kapitaal geiht na den Anbeder, dorför ward de nich förderte Schicht bloots mit den Ertragsdeel besteuert (§ 22 Nr. 5 S. 2 Buchst. a EStG, 17 % vun Öller 67 af ansteed hier ümmer 26 %). De förderte Schicht is in beide Fäll vullens naglagert steuerplichtig, dat ännert sik nich.',
+ 'f.I:agz_fix_min.hint': 'Matching-Modellen kopplt den fasten Bedrag an en Minnst-Egenleisten („wer tominnst X ümwannelt, kriggt Y“). 0 heet ahn Bedingen — denn flütt de Toschuss in elk aktiven Johr, ok bi Bidrag null. Oppass op de Modellsemantik: en wohrhaftig ahn Bedingen Toschuss weer keen Ünnerscheedseffekt vun de Ümwannelensentscheeden un slöög sik dat Verglieks to’n Vördeel vun de bAV to Book, ok wenn he ok ahn Ümwannelen fleet. Dor bloots inschrieven, wat wohrhaftig an de Deelnahm hangt.',
+ 'f.I:rentfak_av.hint': 'Bloots bi Verrentung vun dat Depot. Vöreenstellt as bi de bAV; en Depotvertrag kummt ahn Versekermantel ut un kann dorüm günstiger wesen — den Wart ut dat konkrete Angebot inschrieven. Bi 0 gifft dat keen Rent.',
+ 'f.I:rentdyn_av.hint': 'Överschussbedeelen resp. Fondsentwicklung in de Rentphaas vun den Depotvertrag.',
+ 'f.I:rentfak.hint': 'Bloots bi Utbetahlensform „Rent“. 26 € Maandrent op 10.000 € entspreckt ümmer 3,1 % Entnahmquot. Steiht in’t Produktinformatschoonsblatt.',
+ 'f.I:rentdyn.hint': 'Överschussbedeelen resp. Fondsentwicklung in de Rentphaas.',
+ 'f.I:fuenftel.hint': '§ 34 EStG is bi planmäßige Kapitaalafdingen ut § 3 Nr. 63-Verträg na BFH X R 23/15 bloots as Utnahm anwennbaar. Vörsichtig: nee.',
+ 'f.I:planende.hint': 'Utbetahlensplääns lööpt bit hierher. Renten för’t hele Leven ward över den sülvigen Horizont verglieken; wat na dat noch flütt, steiht as Memo ünner „Diagnoos“. Wer old ward, gewinnt dor.',
+ 'f.I:ausscheid.hint': 'Vun hier af keen Gehalt un keen Bidrääg mehr. Dat Kapitaal verzinst sik wieder bit to’n Utbetahlensanfang.',
+ 'f.I:tzalter.hint': 'Elk Wart vun’n Utbetahlensanfang af heet: keen Deeltiet. Vöreenstellt is dorüm 67.',
+ 'f.I:tzfaktor.hint': 'Andeel vun dat Vulltietgehalt. 60 % = 60-%-Stell.',
+ 'f.I:gsteig.hint': 'Schrifft ok de Bidragsgrenzen, de Bezugsgröße, dat Dörsnittsentgelt un den Rentwart wieder.',
+ 'f.I:stkl.hint': 'Utslaggevend is de VERANLAGENSAART, nich de Loonsteuerklass: de Klass stüürt bloots den ünnerjöhrigen Aftog, de Johresbescheed reekt sowieso mit Splitten na § 32a Abs. 5 EStG. Bi „tosamen“ ünbedingt dat zvE vun’n Partner inschrieven.',
+ 'f.I:partner.hint': 'Bloots bi tosamen Veranlagen. Reekt ward 2·ESt((zvE + zvE_Partner)/2).',
+ 'f.I:kist.hint': '8 % in Bayern un Baden-Württemberg, süss 9 %, 0 bi Utdreden ut de Kark. Wirkt ok op de Afgeltensteuer: 0,25/(1+0,25k)·(1+0,055+k).',
+ 'f.I:tarifanp.hint': 'De hele Tarif ward üm den Faktor λ = (1+x)^t streckt: ESt = s·λ·T(zvE/s/λ). Dat is nau äquivalent to en proportionale Verschuven vun all Eckwarten. 0 % wiest hele koole Progression.',
+ 'f.I:kinder.hint': 'Kinnertolaag in’t Altersvorsorgedepot: 1 € op elk inbetahlten €, bit 300 € op elk Kind.',
+ 'f.I:kind_jahre.hint': 'De Kinnertolaag hangt an’n Kindergeldanspröök (§ 85 EStG), lööpt also nich över de hele Sparphaas.',
+ 'f.I:kinderlos.hint': '0,6 Prozentpunkten Toslag to de Plegversekern, alleen vun’n Arbeidnehmer to dregen (§ 55 Abs. 3 SGB XI).',
+ 'f.I:k_bav.hint': 'Versekermantel plus TER. De effektiven Kösten staht in’t Produktinformatschoonsblatt — dor nakieken, nich schätten.',
+ 'f.I:k_av.hint': 'Bi’n Standarddepot sünd de effektiven Kösten gesettlich op 1,0 % in’t Johr deckelt.',
+ 'f.I:k_priv.hint': 'Reine TER vun en breden Welt-ETF.',
+ 'f.I:infl.hint': 'Diskonteersatz för all Angaven „in hüdige Koopkraft“. Ännert de Rangorden knapp, aver all Niveaus.',
+ 'f.I:sonst_zve.hint': 'Vör allen de steuerplichtige Deel vun de gesettliche Rent, ahn de hier verglekenen Produkten. Bestimmt den Grenzsteuersatz in de Utbetahlensphaas — un dormit de Tarifarbitraag t₀ − t₁.',
+ 'f.I:rente_br.hint': 'Bloots för den Deckel in de Krankenkass: gesettliche Rent un Versorgungsbezüge deelt sik EEN Bidragsgrenz (§ 223 Abs. 3 SGB V).',
+ 'f.P:bbg_rv.hint': 'SVBezGrV 2026 (BGBl. 2025 I Nr. 116), för’t hele Land liek.',
+ 'f.P:bbg_kv.hint': 'SVBezGrV 2026; 5.812,50 € in’n Maand.',
+ 'f.P:bezug.hint': 'SVBezGrV 2026, 47.460 € in’t Johr. En Twintigsteel dorvun is de Frisbedrag för Versorgungsbezüge in de KV (§ 226 Abs. 2 S. 2 SGB V).',
+ 'f.P:de_rv.hint': 'Anlaag 1 to SGB VI, Wart 2026 — Nenner för de Entgeltpunkten.',
+ 'f.P:rw.hint': 'Rentenwertbestimmungsverordnung 2026, vun’n 1.7.2026 af: 42,52 € (+4,24 %).',
+ 'f.P:rv_an.hint': '18,6 %, half un half.',
+ 'f.P:av_an.hint': '2,6 %, half un half.',
+ 'f.P:kv_allg.hint': '§ 241 SGB V.',
+ 'f.P:kv_zus.hint': 'Bekanntmaken vun’t BMG; kassenafhangig verschedens — den Satz vun Ehr Kass inschrieven.',
+ 'f.P:pv_ges.hint': '§ 55 SGB XI. Kinnerafslääg vun’t twete Kind af sünd nich modelleert.',
+ 'f.P:pv_an.hint': 'In Sachsen anners (2,3 %).',
+ 'f.P:pv_kl.hint': '§ 55 Abs. 3 SGB XI, alleen vun’n Arbeidnehmer.',
+ 'f.P:gfb.hint': '§ 32a Abs. 1 EStG in de Fatung vun dat Steuerfortentwicklungsgesetz.',
+ 'f.P:e2.hint': 'Grenzsteuersatz stiggt vun 14 % op 23,97 %.',
+ 'f.P:e3.hint': 'Grenzsteuersatz stiggt vun 23,97 % op 42 %.',
+ 'f.P:e4.hint': 'Vun 277.826 € af gellt 45 %.',
+ 'f.P:a2.hint': 'ESt = (a₂·y + b₂)·y mit y = (zvE − Grundfrisbedrag)/10.000.',
+ 'f.P:a3.hint': 'ESt = (a₃·z + b₃)·z + c₃ mit z = (zvE − 17.799)/10.000.',
+ 'f.P:c4.hint': 'ESt = 0,42·zvE − c₄.',
+ 'f.P:c5.hint': 'ESt = 0,45·zvE − c₅.',
+ 'f.P:soli.hint': 'SolzG 1995.',
+ 'f.P:soli_fg.hint': '2026, Grundtarif, betrapt op de faststellte ESt; bi Splitten dubbelt. Dornaben en Mildernzone.',
+ 'f.P:soli_mz.hint': '§ 3 Abs. 2a SolzG.',
+ 'f.P:an_pausch.hint': '§ 9a S. 1 Nr. 1a EStG.',
+ 'f.P:sa_pausch.hint': '§ 10c EStG.',
+ 'f.P:kapst.hint': '§ 32d Abs. 1 EStG.',
+ 'f.P:tfs.hint': '§ 20 Abs. 1 Nr. 3 in Verbinnen mit § 20 InvStG, Aktienfondsandeel över 50 %.',
+ 'f.P:sparerpb.hint': '§ 20 Abs. 9 EStG; bi Splitten verdubbelt. Sluukt en groten Deel vun de Vorabpauschale — kiek de Wartdrievers.',
+ 'f.P:basiszins.hint': 'BMF-Schrieven vun’n 13.01.2026, § 18 Abs. 4 InvStG (2025: 2,53 %). Op 0 setten heet: keen Vorabpauschale.',
+ 'f.P:vp_faktor.hint': '§ 18 Abs. 1 S. 1 InvStG.',
+ 'f.P:st_frei_q.hint': '8 % vun de BBG-RV = 8.112 € in 2026.',
+ 'f.P:sv_frei_q.hint': '§ 1 Abs. 1 S. 1 Nr. 9 SvEV; 4 % = 4.056 € in 2026. Tosamen de Grenz vun’n Rechtsanspröök na § 1a BetrAVG.',
+ 'f.P:zul_g1.hint': 'Altersvorsorgereformgesetz, in Kraft siet Mai 2026, Anwennen vun’n 1.1.2027 af.',
+ 'f.P:zul_s1.hint': 'Bit 360 € Egenbidrag: 50 Cent op elk €.',
+ 'f.P:zul_g2.hint': 'Vun 361 bit 1.800 €: 25 Cent op elk €.',
+ 'f.P:zul_s2.hint': 'Hööchstbedrag förderten Egenbidrag; gifft en maximal Grundtolaag vun 540 €.',
+ 'f.P:kind_zul.hint': '1 € op elk inbetahlten €, bit 300 € op elk Kind.',
+ 'f.P:av_max.hint': 'BMF-FAQ to de Reform vun de förderte private Öllersvörsorg, Stand 05.05.2026. Wat dorbaven liggt, lööpt in en Nevenstreeg, de as en privaat Depot besteuert ward.',
+ 'f.P:av_sa_max.hint': 'MODELLANNAHM, Vertroensgraad ca. 70 %. Egenbidrag bit 1.800 € plus Tolagen. Disse een Tall beslutt, of en Kind den Wart vun’t AV-Depot höövt oder sackt.',
+ 'f.P:ertragsq.hint': '§ 22 Nr. 1 S. 3 Buchst. a Doppelbuchst. bb EStG, för nich förderte Rentendelen.',
+ 'f.P:halb.hint': '§ 20 Abs. 1 Nr. 6 S. 2 EStG analoog (Vertrag över 12 Johr, Utbetahlen na 62): half Ünnerscheedsbedrag. Vertroensgraad ca. 80 %.',
+
+ /* ---------------- Allgemeen Text, Foot, Kenntallen ---------------- */
+ 'app.meta': 'Bedrieflich Öllersvörsorg, Altersvorsorgedepot un privaat ETF-Depot bi liek Nettoutgaav verglieken. Rechtsstand 2026.',
+ 'hdr.sub': 'Bedrieflich Öllersvörsorg, Altersvorsorgedepot un privaat ETF-Depot &mdash; bi <b>liek Nettoutgaav</b> un mit den sülvigen ETF. Rechtsstand 2026.',
+ 'input.sub': 'De Tallen reeknt sik bi elk Ännern gliek nee ut. Mit <span class="qm" style="cursor:default">?</span> verkloort sik elk Feld sülm.',
+ 'extra.sub': 'Allens hier hett sinnige Vöreenstellens. Bloots anfaten, wenn dat op Ju toropasst.',
+ 'calc.sub': 'För all, de dat nakieken wüllt.',
+ 'share.sub': 'Ehr Angaven liggt alleen in disse Browser (<kbd>localStorage</kbd>). Nix ward överdragen, dat gifft keen Server un keen Tracker.',
+ 'footer.1': '<b>Keen Steuer- oder Anlaagberaden.</b> En Modell is keen Vertrag. De Rechtslaag 2026 to de reformeerte private Öllersvörsorg is an mehr Steden noch nich sluttich klaart; de Annahmen mit den lüttsten Vertroensgraad staht ünner „Reekweg → Belastborkeit vun de Annahmen“ un sünd dor ok to ännern.',
+ 'footer.2': 'Reekkeern een to een överdragen ut dat Excel-Modell <span class="pill">bAV-DYNO_vs_Altersvorsorgedepot_vs_ETF.xlsx</span> un gegen dree Testfäll op Maschienngenauigkeit pröövt (grötte relative Afwieken 1,3·10<sup>&minus;14</sup>).',
+ 'metric.monat.desc': 'Kunstant Maandbetahlen över de hele Utbetahlensphaas mit den sülvigen Wart, in hüdige Koopkraft. De enkige Tall, de sik direkt mit Ehr hüdig Nettoinkamen verglieken lett.',
+ 'metric.ertrag.desc': 'Wat de Mööglichkeit in hüdige Koopkraft över den egen Insatz erut afwirft: Barwart vun all Netto-Leisten minus Barwart vun de Nettoutgaav.',
+ 'metric.irr.desc': 'Rendit op den wohrhaftig insetten Nettobetrag, nominaal. Direkt to verglieken mit de instellte Bruttorendit vun’n ETF — de Ünnerscheed is nau dat, wat Förderung un Afgaven tosamen kösten oder bringt.',
+ 'metric.kapital.desc': 'Vör Steuern un vör Sozialafgaven, nominaal. Mit Bedacht NICH de Entscheedensgrött: de bAV föhrt hier faken, verlüst aver bi de Utbetahlen.',
+ 'ui.couple': '<span>⇅</span> Twee Ansichten op de sülvige Grött. Ännert een, folgt de anner.',
+ 'ui.legalNote': 'Gesettliche Grötten mit Fundsteed. Bloots ännern, wenn sik dat Recht ännert hett oder Ehr Kass afwiekt.',
+
+ /* ---------------- Bedingte Anmarken bi de Regler ---------------- */
+ 'n.beitrag.ueber8': function(p, f){
+ return 'Över 8 % vun de Bidragsgrenz RV (' + f.eur(p.v8) + ' in’t Johr). De Deel dorbaven is '
+ + 'nich steuer- un nich sozialafgavenbegünstigt — he wannert in’n Versekermantel un haalt '
+ + 'sik dor bloots de Bidragsplicht in de Krankenkass af.'; },
+ 'n.beitrag.ueber4': function(p, f){
+ return 'Över 4 % vun de Bidragsgrenz RV (' + f.eur(p.v4) + ' in’t Johr). Bit hierher hebbt Ji '
+ + 'en Rechtsanspröök na § 1a BetrAVG, dorbaven bruukt dat de Tostimmen vun’n Baas.'; },
+ 'n.agzus.gedeckelt': function(p, f){
+ return 'Deckelt bi ' + f.pct(p.quote, 1) + '. De Baas spoort wohrhaftig bloots '
+ + f.eur2(p.ersparnis) + ' in’t Johr — höger Warten ännert hier nix, so lang de '
+ + 'Toschuss-Modus „nipp un nau reekt“ bliff.'; },
+ 'n.agz_fix.fliesstNicht': function(p, f){
+ return 'Flütt nich: Ehr Maandbidrag vun ' + f.eur2(p.beitrag) + ' liggt ünner de Minnstschwell '
+ + 'vun ' + f.eur2(p.schwelle) + ' (Feld ünner „Wiedere Angaven“).'; },
+ 'n.agz_fix.ueber4': function(p, f){
+ return 'De fasten Toschuss alleen övertrütt den 4-%-Putt (' + f.eur(p.topf)
+ + ' in’t Johr) üm ' + f.eur(p.ueber) + '. Disse Deel weer bi Ju bidragsplichtig '
+ + 'Arbeidsentgelt — dat Modell reeknt de tosätzliche Bidragslast NICH gegen un överschätt '
+ + 'de bAV in den Maat.'; },
+ 'n.agz_fix.verdraengung': function(p, f){
+ return 'Füllt den 4-%-Putt vörrangig: vun Ehrn egen Bidrag bliff bloots noch '
+ + f.eur(p.rest) + ' sozialafgavenfri. Ehr Nettoutgaav stiggt dordör — de Toschuss is '
+ + 'liekers geschenkt Geld, he verschufft bloots de Grenz vun de egen Förderung.'; },
+ 'n.agz_fix.ueber8': 'Tosamen mit den egen Bidrag över 8 % vun de BBG-RV — de Överhang is nich steuer- un nich bidragsbegünstigt.',
+ 'n.agz_fix_min.knapp': function(p, f){
+ return 'Ji liggt bloots ' + f.eur2(p.d) + ' över de Schwell. Dorünner fallt de fasten '
+ + 'Toschuss heel weg: de Grenzrendit vun’n leste Bidrags-Euro is hier ahn Enn, de Koppeln '
+ + 'Brutto ↔ Netto dor ünstetig.'; },
+ 'n.agz_fix_min.verfehlt': function(p, f){
+ return 'Schwell nich erreekt — ' + f.eur2(p.fehlt) + ' mehr in’n Maand lööst ' + f.eur2(p.zuschuss)
+ + ' Toschuss ut. Dat is meist ümmer de meist lohnende Euro in’t hele Modell.'; },
+ 'n.teilkap.kosten': function(p, f){
+ return 'Köst ' + (p.gewinn ? 'nix, in’t Gegendeel: ' + p.dtxt : p.dtxt + ' ' + p.unit)
+ + ' gegen reine Verrenten. Grund: dat Eenmalbedrag is in’t Tofloot-Johr vullens '
+ + 'steuerplichtig (Grenzbelasten dor ' + f.pct(p.grenz, 1) + ') un verzinst sik na dat '
+ + 'bloots noch mit den Satz na Afgeltensteuer ansteed mit de Produktrendit.'; },
+ 'n.av_auszform.horizont': function(p, f){
+ return 'Över den Verglieksenn erut betahlt disse Rent noch ' + f.eur(p.rest)
+ + ', de hier NICH mit tellt ward. En fasten Horizont ünnerschätt elk Rent för’t hele '
+ + 'Leven systematisch — wer old ward, gewinnt hier.'; },
+ 'rank.swap': function(p, f){
+ return '<b>De Kenntallen sünd sik nich eenig.</b> Na de Maandleisten liggt '
+ + p.a + ' vör ' + p.b + ', na den Barwart vun’n Netto-Ertrag is dat ümdreiht. '
+ + 'Grund: de Barwart tinst mit de Inflatschoon af (' + f.pct(p.infl, 2) + '), de '
+ + 'Maandleisten verrent mit den Wedderanlaagtins na Steuern (' + f.pct(p.wiederanl, 2) + '). '
+ + 'Je wieder disse beide utenanner liggt, desto beter steiht en fröhe Kapitaalutbetahlen dor. '
+ + 'Welk Kenntall gellt, hangt dorvun af, of Ji dat Geld anleggen oder utgeven würrt — bi '
+ + '„utgeven“ den Wart in’t Feld „Kösten privaat ETF-Depot“ so setten, dat de Wedderanlaagtins '
+ + 'gegen null geiht.'; },
+ 'warn.unreachable': 'Disse Nettoutgaav is nich to erreken — se övertrütt Ehr Gehalt. Instellt is de hööchste mööglich Wart.',
+ 'warn.inactive': 'In’t eerste Johr sünd Ji na Ehr Angaven nich mehr in Arbeid — dat gifft keen Entgeltümwannelen, also ok keen Nettoutgaav, to de sik en Bruttobidrag torüchreken leet. Kiekt „Utscheden ut den Job“ un „Öller vandaag“ na.',
+ 'verdict.lead': function(p){
+ return '<b>' + p.satz + '</b> liggt vörn mit ' + p.wert + ' — ' + p.d2 + ' mehr as ' + p.nom2
+ + (p.nom3 ? ' un ' + p.d3 + ' mehr as ' + p.nom3 : '') + '.'; },
+ 'verdict.top': function(p, f){
+ return ' Den grötsten Enkelposten in’n Afstand ' + p.gen + ' to’t private ETF-Depot bild „'
+ + p.label + '“ — un tominnst ' + (p.pro ? 'to’n Vördeel vun' : 'to Laasten vun') + ' ' + p.gen
+ + ', mit ' + f.eur(p.wert) + ' Barwart. De vulle Optellen steiht ünner „Wartdrievers“.'; },
+ 'verdict.band': function(p, f){
+ return '<span class="band">Wo belastbaar is dat? Bi en Bruttorendit vun ' + f.pct(p.lo, 1)
+ + ' ansteed ' + f.pct(p.mid, 1) + ' weer dat ' + p.vlo + ', bi ' + f.pct(p.hi, 1) + ' weer dat '
+ + p.vhi + ' — de Rangorden '
+ + (p.stabil ? 'bliff in disse Spann de sülvige.'
+ : '<b>dreiht sik in disse Spann üm</b>, dat Resultaat dregt hier also nich.')
+ + '</span>'; },
+ 'demo.text': '<b>Dat sünd noch Bispeelwarten</b> — 40 Johr old, 75.000 € Johresbrutto, 300 € Entgeltümwannelen in’n Maand, gesettlich krankenverseckert. Schriev ünner „Ehr Angaven“ Ehr egen in; disse Anwiesen verswinnt denn vun sülm.',
+ 'sens.readout': 'Streekt: Ehr aktuell Wart. Ringen: Snittpunkten mit dat private Depot. Över de Kurv föhren oder tippen för Warten.',
+ 'sens.note': function(p){
+ return 'De leste beweegte Regler ward över sien hele Spann dörreekt — ' + p.n
+ + ' vulle Modellläuf. Aktuell: „' + p.label + '“. '
+ + 'Beweegt en annern Regler, wesselt de Kurv mit.'; },
+ 'sens.noteNetto': function(p, f){
+ return ' Oppass: disse Regler ännert ok de Nettoutgaav (hier ' + f.eur2(p.lo) + ' bit '
+ + f.eur2(p.hi) + ' in’n Maand) un dormit den Bedrag, de in all dree Mööglichkeiten investeert '
+ + 'ward. Dorüm sünd de dree Kurven bi elk enkel x fair to verglieken, dat Niveau twüschen '
+ + 'verschedene x aver nich. De Knicken sitt bi de Bidragsgrenzen ('
+ + f.eur(p.bbgkv) + ' för KV/PV, ' + f.eur(p.bbgrv) + ' för RV/AV) un bi de Tarifeckwarten.'; },
+ 'wf.check': function(p, f){
+ return 'Proov: ' + f.eur(p.start) + ' + ' + f.eur(p.summe) + ' = ' + f.eur(p.start + p.summe)
+ + ' (schull ' + f.eur(p.ende) + ' wesen, Afwieken ' + f.nf2(p.start + p.summe - p.ende) + ' €).'; },
+ 'wf.note': 'Teleskopeernde Optellen, dorüm geiht se nau op — aver se is <b>rehenfolgafhangig</b>: de Effekten sünd nich additiv trennbaar, elk Balken meet den Bidrag <i>vörutsett</i> de dorbaven liggenden. Tipp op en Balken för de Herleiden.',
+ 'wfb.vp.note': 'Nich de bAV un nich dat Altersvorsorgedepot kennt de Vorabpauschale (§ 18 InvStG). Meten as privaat Depot ahn Vorabpauschale minus mit. De Balken kann negativ wesen: de Vorabpauschale lööpt to’n groten Deel in den Sparer-Pauschbedrag, höövt aver in vulle Höcht de Köstenbasis — denn is se för dat private Depot netto en Vördeel.',
+ 'wfb.zul.note': 'Fremdgeld na dat nee Tolaagmodell plus den Aftog na § 10a EStG. Meten dör Afschallen vun beide Förderwegen.',
+ 'wfb.arch.note': 'Tarifarbitraag t₀ − t₁ un allens Övrige. Rest bestimmt, dormit de Kett nau opgeiht.',
+ 'wfb.agz.note': 'Fremdgeld — de enkige strukturelle Vördeel vun de bAV, de nich ut dat Steuerrecht kummt. Meten dör Afschallen vun den Toschuss.',
+ 'wfb.tarif.note': 'Grenzsteuersatz bi’n Inbetahlen minus bi’n Utbetahlen, plus allens Övrige. Rest bestimmt, dormit de Kett nau opgeiht. Steueraufschub alleen is nix weert: (1−t)(1+r)ⁿ = (1+r)ⁿ(1−t), Multiplikatschoon kommuteert.',
+ 'wfb.kvpv.note': '§§ 229, 250 SGB V: den hele Bidragssatz dregt de Rentner alleen. Meten as Ünnerscheed to de Instellen „PKV in’n Ruhestand“.',
+ 'wfb.ep.note': 'Entgeltümwannelen minnert dat bidragsplichtige Entgelt un dormit de gesettliche Rent. Netto gegenreeknt.',
+ 'kap.readout': function(p, f){
+ return 'Bi’n Rentanfang bunnen: bAV ' + f.eur(p.bavGeb) + ' vun ' + f.eur(p.bav)
+ + ' · AV-Depot ' + f.eur(p.avGeb) + ' vun ' + f.eur(p.av)
+ + ' · privaat Depot ' + f.eur(0) + ' vun ' + f.eur(p.priv)
+ + '. De äquivalente Maandleisten ward verbruukt, dorüm ennt elk Mööglichkeit bi null.'; },
+ 'kap.note': function(p, f){
+ return 'Kontostand in’t Produkt, in de Utbetahlensphaas tosätzlich de netto wedder '
+ + 'anleggten Utbetahlen (' + f.pct(p.wiederanl, 2) + ' na Steuern) un afdaan de äquivalente '
+ + 'Maandleisten, de wohrhaftig verbruukt ward. Dorüm lööpt elk Mööglichkeit nau op null. Wiel '
+ + 'de Verbruuk bloots ut de Wedderanlaag geiht un dat Produktkapitaal in’t Produkt bliff, wo '
+ + 'dat mit de Produktrendit vör Steuern wasst, lööpt de Kurven liekers nich proportional. '
+ + '— De streekte Lien is de fri to bruken Deel: de bAV is bit to’n Rentanfang vullens '
+ + 'bunnen (§ 1b BetrAVG kennt Ünverfallborkeit, nich Verfögborkeit), bi’t Altersvorsorgedepot '
+ + 'is en Entnahm vör 65 förderschädlich un fri bloots de Överschuss över den '
+ + 'Johreshööchstbedrag, dat private Depot is jümmer fri. Dat is de enkige Ass, op de en '
+ + 'Kapitaalutbetahlen goot utsüht. '
+ + (p.verrentet ? 'Wiel Ji dat Depot verrent, geiht ok dor dat Kapitaal na den Anbeder — de '
+ + 'Kurv sackt dorna, ok wenn nix verloren geiht. ' : '')
+ + 'Un noch een Maal düdlich: de Kurven wiest dat Vermögen ut DISSE een Entscheeden, nich '
+ + 'Ehr hele Vermögen.'; },
+ 'zer.readout': 'Allens as kunstante Maandleisten in hüdige Koopkraft. Wiel Verrenten lineaar is, tellt sik de Blöck nau to’n Sluss.',
+ 'zer.note': function(p, f){
+ return 'De Betrapstiet is för all dree Mööglichkeiten liek. En Kapitaalutbetahlen ward nich '
+ + 'dör twölf deelt, sünnern mit den Wedderanlaagtins na Steuern (' + f.pct(p.wiederanl, 2)
+ + ' in’t Johr) op den sülvigen Tietruum verrent. Wer dat Kapitaal verbruukt ansteed to’n '
+ + 'Anleggen, steiht slechter dor.'; },
+ 'det.warn.lead': 'Ji liggt buten den begünstigten Korridor: ',
+ 'det.warn.aussch': 'Över 100 % Utnutten gifft dat keen Rechtsanspröök mehr op Entgeltümwannelen. ',
+ 'det.warn.ngef': 'En spöörbaar Deel vun de Bidrääg is nich steuer- un nich sozialafgavenbegünstigt — disse Schicht wannert in en Versekermantel, ahn dorför wat to kriegen buten de Bidragsplicht in de KV. ',
+ 'det.warn.vb': 'Dat Versorgungsbezug övertrütt den Frisbedrag düdlich; de Schirmwirken vun’n absoluten Frisbedrag sackt as 1/Kapitaal. ',
+ 'det.ann.intro': 'De Rangorden hangt an Rechtsfragen, de 2026 noch nich all klaart sünd. De Tallen in Klammern sünd subjektive Vertroensgraden.',
+ 'det.ann.notmodelled': '<b>Nich modelleert:</b> Afslääg bi fröhtiedigem Rentbetog, Wirken vun de Entgeltümwannelen op Kranken-, Arbeidslosen- un Ellerngeld, Hinnerblevenenversorgung, Insolvenzsekern (PSVaG), Portabilität bi Baaswessel, Kinnerafslääg in de PV, Günstigerpröven na § 32d Abs. 6 EStG, Pfänden- un Grundsekernsschutz, Langlevenrisiko achter den Horizont.',
+ 'det.prinzip': '<p>En Verglieks vun <i>Bruttobidrääg</i> weer nich fair: Entgeltümwannelen kummt ut dat Brutto, privaat Sparen ut dat Netto. Dorüm ward de <b>Nettoutgaav</b> liekstellt:</p>'
+ + '<p style="font-family:var(--mono);font-size:.82rem;background:var(--chip);padding:9px 11px;border-radius:9px">Nettoutgaav = Bruttobidrag − Loonsteuer-Spoorn − spoorte AN-Deel to de Sozialversekern</p>'
+ + '<p>Nau disse Bedrag ward in all dree Mööglichkeiten investeert. Wat överbliff, is en Verglieks vun <i>Förderarchitekturen</i>, nich vun de Inbetahlenshöchten.</p>'
+ + '<p><b>Steueraufschub alleen is nix weert:</b> (1−t)·(1+r)ⁿ = (1+r)ⁿ·(1−t). Multiplikatschoon kommuteert. Dor bliff bloots veer Wartdrievers:</p>'
+ + '<ol style="padding-left:1.2em;margin:.3em 0"><li>Tarifarbitraag t₀ − t₁</li>'
+ + '<li>Fremdgeld — Toschuss vun’n Baas resp. Tolagen</li>'
+ + '<li>steuerfri Toslüten — keen Vorabpauschale</li>'
+ + '<li>nee Afgaven, de bloots een Mööglichkeit drapt — KV/PV op Versorgungsbezüge</li></ol>'
+ + '<p>Punkt 4 is de dominante Nadeel vun de bAV, Punkt 2 ehr enkige strukturelle Vördeel. De Rendit vun de bAV <b>sackt streng monoton mit de Bidragshöcht</b>, wiel de Frisbedrag absolut is un sien Schirmwirken as 1/K afnimmt — dat gifft keen inner Optimum.</p>'
+ + '<p>Bi Vörgaav vun de Nettoutgaav ward de Bruttobidrag dör Halveern torüchreeknt: N(B) is stetig un streng monoton wassen (dN/dB = 1 − Grenz-SV-Satz − Grenzsteuersatz > 0), wegen de Knicken bi 4 % un 8 % vun de BBG-RV, bi de Bidragsgrenzen un bi de Tarifeckwarten aver nich sluten ümkehrbaar. 34 Halveern liefert ünner een Teihndel Cent.</p>',
+ 'det.s.erg': 'All dree Mööglichkeiten kösten in de Sparphaas nau den sülvigen Bedrag ut dat Netto.',
+ 'det.s.mon': 'All Mööglichkeiten över den sülvigen Tietruum verrent, in hüdige Koopkraft. Wiel Verrenten lineaar is, tellt sik de Riegen nau to’n Sluss.',
+ 'det.s.diag': 'Woran dat liggt — un wo Ji buten den begünstigten Korridor steiht.',
+ 'msg.linkCopied': 'Link kopeert. Wer den opmaakt, süht nau disse Tallen — nix dorvun lööpt över en Server.',
+ 'msg.linkFailed': 'Kopeern güng nich. De Link steiht nu in de Adressenreeg.',
+ 'pwa.offline': '<b>Offlinfähig.</b> De App liggt nu in’n Browser-Cache un lööpt ok ahn Verbinnen. To’n Installeern: op’t iPhone „Delen“ → „To’n Startbildschirm“, op Android dat Menü → „App installeern“.',
+ 'pwa.installAsk': '<b>As App installeern?</b> Denn liggt se mit egen Teken op’n Startbildschirm un lööpt offline. ',
+ 'pwa.declined': 'All right — de App lööpt ok so, un dat offline.',
+ 'pwa.file': '<b>Ji hebbt de Datei direkt opmaakt</b> (<kbd>file://</kbd>). Allens reeknt, allens ward sekert. Bloots de beiden PWA-Egenschapen fehlt: keen Teken op’n Startbildschirm un keen Offline-Cache — dat bruukt dat hier ok nich, de Datei liggt ja al op’t Gerät. För dat vulle App-Erlevnis den Ordner op en beleebt HTTPS-Webspace leggen un vun dor opmaken.'
+};
diff --git a/app/i18n.nl.js b/app/i18n.nl.js
new file mode 100644
index 0000000..2db754a
--- /dev/null
+++ b/app/i18n.nl.js
@@ -0,0 +1,582 @@
+/* =====================================================================
+ Woordenboek Nederlands. Dezelfde sleutelverzameling als i18n.de.js; wat
+ hier ontbreekt, valt terug op het Duitse woordenboek.
+ De wetsverwijzingen blijven met opzet Duits: dat zijn de primaire bronnen
+ en er bestaat geen officiële Nederlandse vertaling van. „bAV“ staat voor
+ Entgeltumwandlung — pensioenopbouw uit brutoloon via de werkgever; het
+ Nederlandse stelsel kent geen exacte tegenhanger, dus is de afkorting
+ behouden en wordt zij bij eerste gebruik uitgelegd.
+ ===================================================================== */
+window.I18N_NL = {
+ 'f.I:gehalt.label': 'Brutojaarsalaris nu',
+ 'f.I:gehalt.hint': 'Zonder eenmalige uitkeringen, eventueel inclusief een naar rato berekende dertiende maand. Bepaalt uw marginale belastingtarief en of u boven de premiegrenzen van de sociale verzekeringen uitkomt.',
+ 'f.I:beitrag.label': 'Maandelijkse bAV-inleg bruto',
+ 'f.I:beitrag.hint': 'Uitruil van brutoloon volgens § 1a BetrAVG. U hebt slechts een wettelijk recht tot 4 % van de premiegrens van de pensioenverzekering (BBG-RV); daarboven is instemming van de werkgever nodig.',
+ 'f.I:netto_ziel.label': 'Maandelijkse netto-inspanning',
+ 'f.I:netto_ziel.hint': 'Het bedrag waarmee uw besteedbaar inkomen in het eerste jaar daalt — de werkelijk opgegeven consumptie en daarmee de economisch juiste beslisvariabele. Precies dit bedrag wordt in alle drie de opties belegd; dat is de voorwaarde voor een eerlijke vergelijking. Het hangt één-op-één samen met de bruto-inleg hierboven: N(B) = B − premiebesparing − belastingbesparing is strikt stijgend, dus inverteerbaar. Een gesloten vorm bestaat niet vanwege de knikken bij de premiegrenzen en de tariefschijfgrenzen; daarom 34 halveringen — nauwkeurigheid onder een tiende cent.',
+ 'f.I:agzus.label': 'Werkgeversbijdrage',
+ 'f.I:agzus.hint': 'Wettelijk minimum 15 % (§ 1a Abs. 1a BetrAVG); veel werkgevers betalen meer. Het omslagpunt ten opzichte van de privérekening ligt ruwweg waar (1+z)·(1−0,211) ≈ 1, dus z ≈ 26,7 % — na te gaan op de gevoeligheidskromme. In de modus „precies berekend“ is die waarde vaak onbereikbaar, omdat de bijdrage eerder verzadigt.',
+ 'f.I:agz_fix.label': 'Vaste bijdrage daarbovenop',
+ 'f.I:agz_fix.hint': 'Een vast bedrag onafhankelijk van uw eigen inleg, uit cao of ondernemingsovereenkomst — bij Deutsche Bahn en in veel cao’s gebruikelijk, daar bovenop de 15 % volgens § 1a Abs. 1a BetrAVG. Het is een door de werkgever gefinancierde toezegging volgens § 3 Nr. 63 EStG en vult de 8 %-ruimte en de 4 %-premievrijstelling (§ 1 Abs. 1 S. 1 Nr. 9 SvEV) MET VOORRANG: uw eigen uitruil wordt in zoverre verdrongen en duurder. Economisch is het een sokkel, geen hefboom: het marginale rendement van uw volgende ingelegde euro verandert er niet door (∂²opbrengst/∂agz_fix ∂inleg ≤ 0, via de verdringing kan het dat zelfs verlagen), maar het gemiddelde stijgt er sterk door. Op de gevoeligheidskromme verloopt het daarom bij benadering affien — totdat de 4 %- of 8 %-ruimte is uitgeput, waar de kromme knikt.',
+ 'f.I:agz_fix_dyn.label': 'Vaste bijdrage indexeren',
+ 'f.I:agz_fix_dyn.hint': 'Vaste bedragen staan meestal nominaal in de cao en worden alleen bij cao-rondes verhoogd — vandaar de standaardinstelling „nominaal constant“. Over 27 jaar bij 2 % inflatie blijft daarvan de factor 1,02⁻²⁷ ≈ 0,59 over; wie dat te pessimistisch vindt, schakelt over op „met het salaris“ en krijgt een reële bijdrage met groeivoet gsteig − infl.',
+ 'f.I:agz_fix_dyn.o0': 'nominaal constant',
+ 'f.I:agz_fix_dyn.o1': 'met het salaris',
+ 'f.I:agzus_sv.label': 'Bijdragemodus',
+ 'f.I:agzus_sv.hint': '„Precies“ is de wettekst: § 1a Abs. 1a BetrAVG verschuldigt de bijdrage alleen VOOR ZOVER de werkgever daadwerkelijk sociale premies bespaart. Ligt uw loon boven beide premiegrenzen, dan bespaart hij niets en is hij niets verschuldigd. Daarom verzadigt de schuifregelaar hierboven in het basisgeval rond 21 %. „Volledige inleg“ is een vrijwillige of cao-toezegging, „premievrije deel“ de wijdverbreide forfaitaire praktijk. Vertrouwen in de strikte lezing ca. 75 %.',
+ 'f.I:agzus_sv.o0': 'volledige inleg',
+ 'f.I:agzus_sv.o1': 'premievrije deel',
+ 'f.I:agzus_sv.o2': 'precies berekend',
+ 'f.I:dyn.label': 'Inleg indexeren',
+ 'f.I:dyn.hint': 'Stijgt de inleg mee met het salaris, dan blijft het gebruik van de 8 %-ruimte over de jaren ongeveer constant. Blijft hij nominaal constant, dan daalt zijn reële waarde met de inflatie — en daarmee ook de netto-inspanning die de twee andere opties ter vergelijking krijgen.',
+ 'f.I:dyn.o1': 'met het salaris',
+ 'f.I:dyn.o0': 'nominaal constant',
+ 'f.I:rendite.label': 'Brutorendement ETF p.j.',
+ 'f.I:rendite.hint': 'Vóór kosten, vóór belasting. In alle drie de opties dezelfde ETF — alleen zo vergelijkt u subsidiearchitecturen in plaats van beleggingsbeslissingen.',
+ 'f.I:alter.label': 'Leeftijd nu',
+ 'f.I:alter.hint': 'Startpunt van de opbouwfase. Kalenderjaar 0 = 2026.',
+ 'f.I:alter.unit': 'jaar',
+ 'f.I:rentbeg.label': 'Start van de uitkering',
+ 'f.I:rentbeg.hint': 'Start van de uitkeringsfase van alle drie de opties. De Altersvorsorgedepot-rekening keert op zijn vroegst vanaf 65 uit (hervorming 2026).',
+ 'f.I:rentbeg.unit': 'jaar',
+ 'f.I:kv_ruhe.label': 'Ziektekostenverzekering na pensionering',
+ 'f.I:kv_ruhe.hint': 'De doorslaggevende hefboom. In de wettelijke ziektekostenverzekering (GKV) gelden bedrijfspensioenen als Versorgungsbezüge en dragen zij het volle premietarief (§§ 229, 250 SGB V); privépensioen niet. Deze instelling alleen al draait de uitkomst om.',
+ 'f.I:kv_ruhe.o1': 'wettelijk',
+ 'f.I:kv_ruhe.o2': 'particulier',
+ 'f.I:auszform.label': 'bAV-uitkering',
+ 'f.I:auszform.hint': 'Kapitaal: volledig belast in het jaar van ontvangst, ziektekostenpremies gespreid over 120 maanden (§ 229 Abs. 1 S. 3 SGB V). Een lijfrente rekt de uitkering over de resterende levensduur en schermt daarom een veelvoud aan kapitaal af onder dezelfde vrijstelling. Het model kent alleen alles of niets; gedeeltelijke afkoop van de bAV is niet gemodelleerd.',
+ 'f.I:auszform.o1': 'kapitaal',
+ 'f.I:auszform.o2': 'levenslange lijfrente',
+ 'f.I:teilkap.label': 'Altersvorsorgedepot: bedrag ineens bij aanvang',
+ 'f.I:teilkap.hint': 'Tot 30 % van het opgebouwde kapitaal kan bij aanvang van de uitkeringsfase ineens worden opgenomen — in beide uitkeringsvormen. Dat kost u tweemaal: volle progressie in het jaar van ontvangst, en daarna alleen nog het rendement na bronbelasting. Het meerdere boven het jaarmaximum (de „sleeve“) wordt zonder bedrag ineens omgezet in lijfrente; dat is een modelconventie, geen rechtsregel.',
+ 'f.I:av_auszform.label': 'Altersvorsorgedepot: rest',
+ 'f.I:av_auszform.hint': 'Wat er gebeurt met het kapitaal boven het bedrag ineens — onafhankelijk van de bAV-keuze hierboven. Opnameplan: het geld blijft belegd en wordt met rendement onttrokken; de niet-gesubsidieerde laag wordt belast over het halve verschilbedrag. Levenslange lijfrente: het kapitaal gaat naar de aanbieder, in ruil daarvoor wordt de niet-gesubsidieerde laag alleen over het rentebestanddeel belast (§ 22 Nr. 5 S. 2 Buchst. a EStG, 17 % vanaf leeftijd 67 in plaats van hier circa 26 %). De gesubsidieerde laag is in beide gevallen volledig uitgesteld belast; daar verandert niets aan.',
+ 'f.I:av_auszform.o1': 'opnameplan',
+ 'f.I:av_auszform.o2': 'levenslange lijfrente',
+ 'f.I:agz_fix_min.label': 'Minimale eigen inleg voor de vaste bijdrage',
+ 'f.I:agz_fix_min.hint': 'Matching-regelingen koppelen het vaste bedrag aan een minimale eigen prestatie („wie ten minste X uitruilt, krijgt Y“). 0 betekent onvoorwaardelijk — dan vloeit de bijdrage in elk actief jaar, ook bij inleg nul. Let op de modelsemantiek: een werkelijk onvoorwaardelijke bijdrage zou geen differentieel effect van de uitruilbeslissing zijn en zou de bAV in deze vergelijking flatteren, hoewel zij ook zonder uitruil zou vloeien. Vul alleen in wat werkelijk van deelname afhangt.',
+ 'f.I:rentfak_av.label': 'Lijfrentefactor Altersvorsorgedepot',
+ 'f.I:rentfak_av.hint': 'Alleen bij omzetting van de rekening in lijfrente. Standaard gelijk aan die van de bAV; een rekeningcontract heeft geen verzekeringsmantel nodig en kan daarom goedkoper zijn — vul de waarde uit de concrete offerte in. Bij 0 is er geen lijfrente.',
+ 'f.I:rentfak_av.unit': '€ per 10.000 €',
+ 'f.I:rentdyn_av.label': 'Indexatie van de rekeninglijfrente p.j.',
+ 'f.I:rentdyn_av.hint': 'Winstdeling respectievelijk fondsontwikkeling in de uitkeringsfase van het rekeningcontract.',
+ 'f.I:rentfak.label': 'Lijfrentefactor bAV',
+ 'f.I:rentfak.hint': 'Alleen bij uitkeringsvorm „lijfrente“. 26 € maanduitkering per 10.000 € komt overeen met circa 3,1 % onttrekkingsvoet. Staat op het productinformatieblad.',
+ 'f.I:rentfak.unit': '€ per 10.000 €',
+ 'f.I:rentdyn.label': 'Indexatie van de bAV-lijfrente p.j.',
+ 'f.I:rentdyn.hint': 'Winstdeling respectievelijk fondsontwikkeling in de uitkeringsfase.',
+ 'f.I:fuenftel.label': 'Vijfdenregeling toetsen',
+ 'f.I:fuenftel.hint': '§ 34 EStG is bij een planmatige afkoopsom uit § 3 Nr. 63-contracten volgens BFH X R 23/15 slechts bij uitzondering van toepassing. Conservatief: nee.',
+ 'f.I:fuenftel.o0': 'nee (conservatief)',
+ 'f.I:fuenftel.o1': 'ja',
+ 'f.I:planende.label': 'Vergelijkingshorizon tot leeftijd',
+ 'f.I:planende.hint': 'Opnameplannen lopen tot hier. Levenslange lijfrentes worden over dezelfde horizon vergeleken; wat daarna nog vloeit staat als memo onder „Diagnose“. Wie oud wordt, wint daar.',
+ 'f.I:planende.unit': 'jaar',
+ 'f.I:ausscheid.label': 'Uitdiensttreding',
+ 'f.I:ausscheid.hint': 'Vanaf hier geen salaris en geen inleg meer. Het kapitaal rendeert door tot de start van de uitkering.',
+ 'f.I:ausscheid.unit': 'jaar',
+ 'f.I:tzalter.label': 'Deeltijd vanaf leeftijd',
+ 'f.I:tzalter.hint': 'Elke waarde vanaf de start van de uitkering betekent: geen deeltijd. Standaard staat er daarom 67.',
+ 'f.I:tzalter.unit': 'jaar',
+ 'f.I:tzfaktor.label': 'Deeltijdfactor',
+ 'f.I:tzfaktor.hint': 'Aandeel van het voltijdsalaris. 60 % = 60 %-aanstelling.',
+ 'f.I:gsteig.label': 'Salaris- en loonstijging p.j.',
+ 'f.I:gsteig.hint': 'Actualiseert ook de premiegrenzen, de Bezugsgröße, het gemiddelde loon en de rentewaarde.',
+ 'f.I:stkl.label': 'Aanslagvorm',
+ 'f.I:stkl.hint': 'Bepalend is de AANSLAGVORM, niet de loonbelastingklasse: de klasse stuurt alleen de inhouding gedurende het jaar, de jaaraanslag rekent hoe dan ook met splitsing volgens § 32a Abs. 5 EStG. Bij „samen“ beslist het belastbaar inkomen van de partner invullen.',
+ 'f.I:stkl.o1': 'afzonderlijk',
+ 'f.I:stkl.o3': 'samen (splitsing)',
+ 'f.I:partner.label': 'belastbaar inkomen partner',
+ 'f.I:partner.hint': 'Alleen bij gezamenlijke aanslag. Berekend wordt 2·IB((bi + bi_partner)/2).',
+ 'f.I:kist.label': 'Kerkbelastingtarief',
+ 'f.I:kist.hint': '8 % in Beieren en Baden-Württemberg, elders 9 %, 0 bij uittreding uit de kerk. Werkt ook door in de bronbelasting: 0,25/(1+0,25k)·(1+0,055+k).',
+ 'f.I:tarifanp.label': 'Aanpassing van de tariefschijven p.j.',
+ 'f.I:tarifanp.hint': 'Het hele tarief wordt met de factor λ = (1+x)^t opgerekt: IB = s·λ·T(bi/s/λ). Dat is exact gelijkwaardig aan een proportionele verschuiving van alle schijfgrenzen. 0 % toont volledige koude progressie.',
+ 'f.I:kinder.label': 'Aantal kinderen',
+ 'f.I:kinder.hint': 'Kindtoeslag in het Altersvorsorgedepot: 1 € per ingelegde € tot 300 € per kind.',
+ 'f.I:kind_jahre.label': 'Jaren met kindtoeslag',
+ 'f.I:kind_jahre.hint': 'De kindtoeslag hangt aan het recht op kinderbijslag (§ 85 EStG) en loopt dus niet over de hele opbouwfase.',
+ 'f.I:kind_jahre.unit': 'jaar',
+ 'f.I:kinderlos.label': 'Kinderloos (PV-toeslag)',
+ 'f.I:kinderlos.hint': '0,6 procentpunt toeslag op de langdurigezorgverzekering, uitsluitend door de werknemer te dragen (§ 55 Abs. 3 SGB XI).',
+ 'f.I:kinderlos.o0': 'nee',
+ 'f.I:kinderlos.o1': 'ja',
+ 'f.I:k_bav.label': 'Kosten bAV-product p.j.',
+ 'f.I:k_bav.hint': 'Verzekeringsmantel plus TER. De effectieve kosten staan op het productinformatieblad — daar opzoeken, niet schatten.',
+ 'f.I:k_av.label': 'Kosten Altersvorsorgedepot p.j.',
+ 'f.I:k_av.hint': 'Bij de standaardrekening zijn de effectieve kosten wettelijk gemaximeerd op 1,0 % p.j.',
+ 'f.I:k_priv.label': 'Kosten privé-ETF-rekening p.j.',
+ 'f.I:k_priv.hint': 'Zuivere TER van een brede wereld-ETF.',
+ 'f.I:infl.label': 'Inflatie p.j.',
+ 'f.I:infl.hint': 'Disconteringsvoet voor alle bedragen „in koopkracht van vandaag“. Verandert de rangorde nauwelijks, maar wel alle niveaus.',
+ 'f.I:sonst_zve.label': 'overig belastbaar inkomen na pensionering',
+ 'f.I:sonst_zve.hint': 'Vooral het belaste deel van het wettelijk pensioen, zonder de hier vergeleken producten. Bepaalt het marginale tarief in de uitkeringsfase — en daarmee de tariefarbitrage t₀ − t₁.',
+ 'f.I:rente_br.label': 'wettelijk brutopensioen p.j.',
+ 'f.I:rente_br.hint': 'Alleen voor het plafond in de ziektekostenverzekering: wettelijk pensioen en Versorgungsbezüge delen ÉÉN premiegrens (§ 223 Abs. 3 SGB V).',
+ 'f.P:bbg_rv.label': 'Premiegrens pensioenverzekering (jaarlijks)',
+ 'f.P:bbg_rv.hint': 'SVBezGrV 2026 (BGBl. 2025 I Nr. 116), landelijk uniform.',
+ 'f.P:bbg_kv.label': 'Premiegrens ziektekosten-/langdurigezorgverzekering',
+ 'f.P:bbg_kv.hint': 'SVBezGrV 2026; 5.812,50 € per maand.',
+ 'f.P:bezug.label': 'Bezugsgröße (maandelijks)',
+ 'f.P:bezug.hint': 'SVBezGrV 2026, 47.460 € per jaar. Een twintigste daarvan is de vrijstelling voor Versorgungsbezüge in de ziektekostenverzekering (§ 226 Abs. 2 S. 2 SGB V).',
+ 'f.P:de_rv.label': 'Gemiddeld loon RV',
+ 'f.P:de_rv.hint': 'Bijlage 1 bij SGB VI, waarde 2026 — noemer voor de pensioenpunten.',
+ 'f.P:rw.label': 'Actuele rentewaarde',
+ 'f.P:rw.hint': 'Rentenwertbestimmungsverordnung 2026, vanaf 1-7-2026: 42,52 € (+4,24 %).',
+ 'f.P:rw.unit': '€',
+ 'f.P:rv_an.label': 'RV-premie werknemersdeel',
+ 'f.P:rv_an.hint': '18,6 % ieder de helft.',
+ 'f.P:av_an.label': 'WW-premie werknemersdeel',
+ 'f.P:av_an.hint': '2,6 % ieder de helft.',
+ 'f.P:kv_allg.label': 'KV algemeen premietarief',
+ 'f.P:kv_allg.hint': '§ 241 SGB V.',
+ 'f.P:kv_zus.label': 'KV gemiddelde aanvullende premie',
+ 'f.P:kv_zus.hint': 'Bekendmaking van het BMG; per fonds afwijkend — het tarief van uw eigen fonds invullen.',
+ 'f.P:pv_ges.label': 'PV totaal premietarief',
+ 'f.P:pv_ges.hint': '§ 55 SGB XI. Kortingen vanaf het tweede kind zijn niet gemodelleerd.',
+ 'f.P:pv_an.label': 'PV werknemersdeel',
+ 'f.P:pv_an.hint': 'In Saksen afwijkend (2,3 %).',
+ 'f.P:pv_kl.label': 'PV toeslag voor kinderlozen',
+ 'f.P:pv_kl.hint': '§ 55 Abs. 3 SGB XI, uitsluitend door de werknemer.',
+ 'f.P:gfb.label': 'Belastingvrije voet (einde zone 1)',
+ 'f.P:gfb.hint': '§ 32a Abs. 1 EStG in de versie van het Steuerfortentwicklungsgesetz.',
+ 'f.P:e2.label': 'Einde zone 2',
+ 'f.P:e2.hint': 'Marginaal tarief stijgt van 14 % naar 23,97 %.',
+ 'f.P:e3.label': 'Einde zone 3',
+ 'f.P:e3.hint': 'Marginaal tarief stijgt van 23,97 % naar 42 %.',
+ 'f.P:e4.label': 'Begin zone 5 (toptarief)',
+ 'f.P:e4.hint': 'Vanaf 277.826 € geldt 45 %.',
+ 'f.P:a2.label': 'Coëfficiënt a₂',
+ 'f.P:a2.hint': 'IB = (a₂·y + b₂)·y met y = (bi − belastingvrije voet)/10.000.',
+ 'f.P:b2.label': 'Coëfficiënt b₂',
+ 'f.P:a3.label': 'Coëfficiënt a₃',
+ 'f.P:a3.hint': 'IB = (a₃·z + b₃)·z + c₃ met z = (bi − 17.799)/10.000.',
+ 'f.P:b3.label': 'Coëfficiënt b₃',
+ 'f.P:c3.label': 'Constante c₃',
+ 'f.P:c4.label': 'Constante c₄',
+ 'f.P:c4.hint': 'IB = 0,42·bi − c₄.',
+ 'f.P:c5.label': 'Constante c₅',
+ 'f.P:c5.hint': 'IB = 0,45·bi − c₅.',
+ 'f.P:soli.label': 'Solidariteitstoeslag',
+ 'f.P:soli.hint': 'SolzG 1995.',
+ 'f.P:soli_fg.label': 'Vrijstellingsgrens soli',
+ 'f.P:soli_fg.hint': '2026, basistarief, betrokken op de vastgestelde inkomstenbelasting; bij splitsing dubbel. Daarnaast een afbouwzone.',
+ 'f.P:soli_mz.label': 'Afbouwzone marginale druk',
+ 'f.P:soli_mz.hint': '§ 3 Abs. 2a SolzG.',
+ 'f.P:an_pausch.label': 'Forfait werknemerskosten',
+ 'f.P:an_pausch.hint': '§ 9a S. 1 Nr. 1a EStG.',
+ 'f.P:sa_pausch.label': 'Forfait bijzondere uitgaven',
+ 'f.P:sa_pausch.hint': '§ 10c EStG.',
+ 'f.P:kapst.label': 'Bronbelastingtarief',
+ 'f.P:kapst.hint': '§ 32d Abs. 1 EStG.',
+ 'f.P:tfs.label': 'Gedeeltelijke vrijstelling aandelenfondsen',
+ 'f.P:tfs.hint': '§ 20 Abs. 1 Nr. 3 juncto § 20 InvStG, aandelenaandeel boven 50 %.',
+ 'f.P:sparerpb.label': 'Spaarforfait',
+ 'f.P:sparerpb.hint': '§ 20 Abs. 9 EStG; bij splitsing verdubbeld. Absorbeert een groot deel van de Vorabpauschale — zie waterval.',
+ 'f.P:basiszins.label': 'Basisrente Vorabpauschale',
+ 'f.P:basiszins.hint': 'BMF-brief van 13-01-2026, § 18 Abs. 4 InvStG (2025: 2,53 %). Op 0 zetten betekent: geen Vorabpauschale.',
+ 'f.P:vp_faktor.label': 'Factor voor de basisopbrengst',
+ 'f.P:vp_faktor.hint': '§ 18 Abs. 1 S. 1 InvStG.',
+ 'f.P:st_frei_q.label': 'belastingvrij § 3 Nr. 63 (aandeel BBG-RV)',
+ 'f.P:st_frei_q.hint': '8 % van de BBG-RV = 8.112 € in 2026.',
+ 'f.P:sv_frei_q.label': 'premievrij (aandeel BBG-RV)',
+ 'f.P:sv_frei_q.hint': '§ 1 Abs. 1 S. 1 Nr. 9 SvEV; 4 % = 4.056 € in 2026. Tevens de grens van het wettelijk recht volgens § 1a BetrAVG.',
+ 'f.P:zul_g1.label': 'Toeslag trap 1 (per € eigen inleg)',
+ 'f.P:zul_g1.hint': 'Altersvorsorgereformgesetz, in werking sinds mei 2026, toepassing vanaf 1-1-2027.',
+ 'f.P:zul_s1.label': 'Grens trap 1',
+ 'f.P:zul_s1.hint': 'Tot 360 € eigen inleg: 50 cent per €.',
+ 'f.P:zul_g2.label': 'Toeslag trap 2 (per € eigen inleg)',
+ 'f.P:zul_g2.hint': 'Van 361 tot 1.800 €: 25 cent per €.',
+ 'f.P:zul_s2.label': 'Grens trap 2',
+ 'f.P:zul_s2.hint': 'Maximum gesubsidieerde eigen inleg; levert een maximale basistoeslag van 540 € op.',
+ 'f.P:kind_zul.label': 'Kindtoeslag per kind',
+ 'f.P:kind_zul.hint': '1 € per ingelegde € tot 300 € per kind.',
+ 'f.P:av_max.label': 'Maximale inleg p.j.',
+ 'f.P:av_max.hint': 'BMF-FAQ over de hervorming van het gesubsidieerde privépensioen, stand 05-05-2026. Wat daarboven ligt, loopt in een nevenspoor dat als een privérekening wordt belast.',
+ 'f.P:av_sa_max.label': 'Maximum aftrek bijzondere uitgaven § 10a',
+ 'f.P:av_sa_max.hint': 'MODELAANNAME, vertrouwen ca. 70 %. Eigen inleg tot 1.800 € plus toeslagen. Deze ene waarde beslist of een kind de waarde van het AV-depot verhoogt of verlaagt.',
+ 'f.P:ertragsq.label': 'Rentebestanddeel (leeftijd 67)',
+ 'f.P:ertragsq.hint': '§ 22 Nr. 1 S. 3 Buchst. a Doppelbuchst. bb EStG, voor niet-gesubsidieerde lijfrentedelen.',
+ 'f.P:halb.label': 'belast aandeel van het verschilbedrag',
+ 'f.P:halb.hint': '§ 20 Abs. 1 Nr. 6 S. 2 EStG naar analogie (contract langer dan 12 jaar, uitkering na 62): half verschilbedrag. Vertrouwen ca. 80 %.',
+
+ /* ---------------- Kader, venstertitels, kop en voet ---------------- */
+ 'app.title': 'Pensioenvergelijking',
+ 'app.meta': 'Bedrijfspensioen via salarisuitruil, Altersvorsorgedepot en privé-ETF-rekening vergelijken bij gelijke netto-inspanning. Rechtstoestand 2026.',
+ 'hdr.title': 'Pensioen&#8209;vergelijking',
+ 'hdr.sub': 'Bedrijfspensioen via salarisuitruil, Altersvorsorgedepot en privé&#8209;ETF&#8209;rekening &mdash; bij <b>gelijke netto-inspanning</b> en met dezelfde ETF. Rechtstoestand 2026.',
+ 'win.header': 'Pensioenvergelijking',
+ 'win.result': 'Uitkomst',
+ 'win.input': 'Uw gegevens',
+ 'win.chart': 'Grafieken',
+ 'win.extra': 'Meer gegevens',
+ 'win.calc': 'Berekening',
+ 'win.share': 'Opslaan en delen',
+ 'win.min': 'Minimaliseren',
+ 'win.restore': 'Herstellen',
+ 'win.n': function(p){ return 'Venster ' + p.n; },
+ 'input.sub': 'De cijfers rekenen zich bij elke wijziging meteen opnieuw uit. Met <span class="qm" style="cursor:default">?</span> legt elk veld zichzelf uit.',
+ 'extra.sub': 'Alles hier heeft zinnige standaardwaarden. Alleen aankomen als het op u van toepassing is.',
+ 'calc.sub': 'Voor wie het wil narekenen.',
+ 'share.sub': 'Uw invoer staat uitsluitend in deze browser (<kbd>localStorage</kbd>). Er wordt niets verzonden, er is geen server en er zijn geen trackers.',
+ 'ui.share': 'Link met mijn cijfers kopiëren',
+ 'ui.export': 'Als bestand opslaan',
+ 'ui.import': 'Bestand laden',
+ 'ui.reset': 'Alles terugzetten',
+ 'ui.pin.set': 'Als referentie onthouden',
+ 'ui.pin.clear': 'Referentie loslaten',
+ 'ui.lang': 'Taal',
+ 'ui.lang.aria': 'Taal kiezen',
+ 'ui.lang.partial': 'slechts gedeeltelijk vertaald',
+ 'ui.lang.partialNote': 'Deze taal is <b>gedeeltelijk vertaald</b>: interface, veldnamen, tabelkoppen en grafieklegenda’s zijn er. De lange juridische toelichtingen — de <span class="qm" style="cursor:default">?</span>-teksten bij de velden, de conclusie en de berekening — verschijnen in het Duits. De wetsverwijzingen (BetrAVG, EStG, SGB V) zijn in elke taal Duits: officieel bestaan ze niet anders.',
+ 'sb.up': 'Omhoog naar de uitkomst',
+ 'footer.1': '<b>Geen fiscaal of beleggingsadvies.</b> Een model is geen contract. De rechtstoestand 2026 rond het hervormde privépensioen is op meerdere punten nog niet definitief opgehelderd; de aannames met het laagste vertrouwen staan onder „Berekening → Houdbaarheid van de aannames“ en zijn daar ook aan te passen.',
+ 'footer.2': 'Rekenkern één op één overgezet uit het Excel-model <span class="pill">bAV-DYNO_vs_Altersvorsorgedepot_vs_ETF.xlsx</span> en tegen drie testgevallen op machineprecisie getoetst (grootste relatieve afwijking 1,3·10<sup>&minus;14</sup>).',
+
+ /* ---------------- De drie opties ---------------- */
+ 'opt.bav.name': 'bAV (salarisuitruil)',
+ 'opt.bav.short': 'bAV',
+ 'opt.bav.nom': 'het bedrijfspensioen',
+ 'opt.bav.satz': 'Het bedrijfspensioen',
+ 'opt.bav.gen': 'van de bAV',
+ 'opt.av.name': 'Altersvorsorgedepot',
+ 'opt.av.short': 'AV-depot',
+ 'opt.av.nom': 'het Altersvorsorgedepot',
+ 'opt.av.satz': 'Het Altersvorsorgedepot',
+ 'opt.av.gen': 'van het Altersvorsorgedepot',
+ 'opt.priv.name': 'privé-ETF-rekening',
+ 'opt.priv.short': 'privé',
+ 'opt.priv.nom': 'de privé-ETF-rekening',
+ 'opt.priv.satz': 'De privé-ETF-rekening',
+ 'opt.priv.gen': 'van de privé-ETF-rekening',
+
+ /* ---------------- Kengetallen ---------------- */
+ 'metric.monat.label': 'Maanduitkering',
+ 'metric.monat.unit': '€/maand',
+ 'metric.monat.desc': 'Constante maandbetaling over de hele uitkeringsfase met dezelfde waarde, in koopkracht van vandaag. Het enige getal dat zich rechtstreeks met uw huidige netto-inkomen laat vergelijken.',
+ 'metric.ertrag.label': 'Netto-opbrengst (contante waarde)',
+ 'metric.ertrag.unit': '€',
+ 'metric.ertrag.desc': 'Wat de optie in koopkracht van vandaag boven de eigen inzet oplevert: contante waarde van alle netto-uitkeringen minus contante waarde van de netto-inspanning.',
+ 'metric.irr.label': 'Interne rentevoet',
+ 'metric.irr.unit': '% p.j.',
+ 'metric.irr.desc': 'Rendement op het werkelijk ingezette nettobedrag, nominaal. Rechtstreeks vergelijkbaar met het ingestelde brutorendement van de ETF — het verschil is precies wat subsidie en heffingen samen kosten of opleveren.',
+ 'metric.kapital.label': 'Kapitaal bij pensioeningang',
+ 'metric.kapital.unit': '€',
+ 'metric.kapital.desc': 'Vóór belasting en vóór sociale premies, nominaal. Bewust NIET de beslisgrootheid: de bAV leidt hier vaak, maar verliest in de uitkering.',
+ 'metric.pa': ' p.j.',
+ 'metric.pp': ' pp.',
+ 'metric.short.monat': 'Maand',
+ 'metric.short.ertrag': 'Opbrengst',
+ 'metric.short.irr': 'IRR',
+ 'metric.short.kapital': 'Kapitaal',
+
+ /* ---------------- Invoervelden, kader ---------------- */
+ 'unit.pct': '%',
+ 'unit.eur': '€',
+ 'unit.eurm': '€/maand',
+ 'ui.hintFor': function(p){ return 'Toelichting bij: ' + p.label; },
+ 'ui.couple': '<span>⇅</span> Twee blikken op dezelfde grootheid. Wijzigt u de ene, dan volgt de andere.',
+ 'ui.cnt.legal': function(p){ return p.n + ' rekengrootheden'; },
+ 'ui.cnt.fields': function(p){ return p.n + ' velden'; },
+ 'ui.legalNote': 'Wettelijke grootheden met vindplaats. Alleen wijzigen als het recht is veranderd of uw fonds afwijkt.',
+ 'group.bav': 'Werkgeversbijdrage en uitkeringsvormen in detail',
+ 'group.person': 'Tijdlijn, uitdiensttreding, deeltijd',
+ 'group.steuer': 'Belasting, aanslag, kinderen',
+ 'group.markt': 'Kosten en inflatie',
+ 'group.ruhe': 'Pensionering',
+ 'group.p_sv': 'Rekengrootheden: sociale verzekeringen 2026',
+ 'group.p_est': 'Rekengrootheden: inkomstenbelastingtarief 2026 (§ 32a EStG)',
+ 'group.p_kap': 'Rekengrootheden: vermogensrendements- en beleggingsfondsbelasting',
+ 'group.p_bav': 'Rekengrootheden: bedrijfs- en gesubsidieerd privépensioen',
+
+ /* ---------------- Meelopende notities bij de velden ---------------- */
+ 'n.beitrag.ueber8': function(p, f){
+ return 'Boven 8 % van de premiegrens RV (' + f.eur(p.v8) + ' per jaar). Het deel daarboven is '
+ + 'noch fiscaal noch sociaalrechtelijk begunstigd — het verdwijnt in de verzekeringsmantel en '
+ + 'haalt daar alleen de premieplicht in de ziektekostenverzekering op.'; },
+ 'n.beitrag.ueber4': function(p, f){
+ return 'Boven 4 % van de premiegrens RV (' + f.eur(p.v4) + ' per jaar). Tot hier hebt u '
+ + 'een wettelijk recht volgens § 1a BetrAVG, daarboven is instemming van de werkgever nodig.'; },
+ 'n.agzus.gedeckelt': function(p, f){
+ return 'Afgetopt op ' + f.pct(p.quote, 1) + '. De werkgever bespaart in werkelijkheid maar '
+ + f.eur2(p.ersparnis) + ' per jaar — hogere waarden veranderen hier niets zolang de bijdragemodus '
+ + '„precies berekend“ blijft.'; },
+ 'n.agz_fix.fliesstNicht': function(p, f){
+ return 'Vloeit niet: uw maandinleg van ' + f.eur2(p.beitrag) + ' ligt onder de '
+ + 'minimumdrempel van ' + f.eur2(p.schwelle) + ' (veld onder „Meer gegevens“).'; },
+ 'n.agz_fix.ueber4': function(p, f){
+ return 'De vaste bijdrage alleen al overschrijdt de 4 %-ruimte (' + f.eur(p.topf)
+ + ' per jaar) met ' + f.eur(p.ueber) + '. Dat deel zou bij u premieplichtig '
+ + 'loon zijn — het model verrekent de extra premielast NIET en '
+ + 'overschat de bAV in zoverre.'; },
+ 'n.agz_fix.verdraengung': function(p, f){
+ return 'Vult de 4 %-ruimte met voorrang: van uw eigen inleg blijft nog maar '
+ + f.eur(p.rest) + ' premievrij. Uw netto-inspanning stijgt daardoor — de bijdrage '
+ + 'is toch geschonken geld, zij verschuift alleen de grens van de eigen subsidie.'; },
+ 'n.agz_fix.ueber8': 'Samen met de eigen inleg boven 8 % van de BBG-RV — het meerdere is noch fiscaal noch premietechnisch begunstigd.',
+ 'n.agz_fix_min.knapp': function(p, f){
+ return 'U zit maar ' + f.eur2(p.d) + ' boven de drempel. Daaronder valt de vaste bijdrage '
+ + 'volledig weg: het marginale rendement van de laatste ingelegde euro is op dat punt oneindig, '
+ + 'de koppeling bruto ↔ netto daar discontinu.'; },
+ 'n.agz_fix_min.verfehlt': function(p, f){
+ return 'Drempel niet gehaald — ' + f.eur2(p.fehlt) + ' meer per maand maakt ' + f.eur2(p.zuschuss)
+ + ' bijdrage los. Dat is bijna altijd de lonendste euro in het hele model.'; },
+ 'n.teilkap.kosten': function(p, f){
+ return 'Kost ' + (p.gewinn ? 'niets, integendeel: ' + p.dtxt : p.dtxt + ' ' + p.unit)
+ + ' ten opzichte van volledige omzetting in lijfrente. Reden: het bedrag ineens is in het jaar van ontvangst volledig '
+ + 'belast (marginale druk daar ' + f.pct(p.grenz, 1) + ') en rendeert daarna alleen '
+ + 'nog tegen het tarief na bronbelasting in plaats van tegen het productrendement.'; },
+ 'n.av_auszform.horizont': function(p, f){
+ return 'Voorbij de vergelijkingshorizon betaalt deze lijfrente nog ' + f.eur(p.rest)
+ + ' uit, die hier NIET zijn meegeteld. Een vaste horizon onderschat elke levenslange '
+ + 'lijfrente systematisch — wie oud wordt, wint hier.'; },
+
+ /* ---------------- Uitkomstkaarten ---------------- */
+ 'card.lead': 'voorop',
+ 'card.unchanged': 'ongewijzigd',
+ 'base.pinned': 'Δ ten opzichte van de onthouden stand',
+ 'base.delta': function(p){ return 'Δ ' + p.desc; },
+ 'base.none': 'Beweeg een schuifregelaar — de verandering verschijnt hier als Δ.',
+ 'base.desc.prev': 'vorige stand',
+ 'base.desc.pinned': 'onthouden stand',
+ 'base.desc.change': function(p){ return 'vóór de wijziging van „' + p.label + '“'; },
+ 'rank.swap': function(p, f){
+ return '<b>De kengetallen zijn het oneens.</b> Naar maanduitkering ligt '
+ + p.a + ' vóór ' + p.b + ', naar contante waarde van de netto-opbrengst is het omgekeerd. '
+ + 'Reden: de contante waarde disconteert met de inflatie (' + f.pct(p.infl, 2) + '), de maanduitkering '
+ + 'annuïteert met de herbeleggingsrente na belasting (' + f.pct(p.wiederanl, 2) + '). Hoe verder die twee '
+ + 'uiteenlopen, hoe beter een vroege kapitaaluitkering eruitziet. Welk kengetal geldt, hangt ervan '
+ + 'af of u het geld zou beleggen of uitgeven — bij „uitgeven“ de waarde in het veld '
+ + '„Kosten privé-ETF-rekening“ zo zetten dat de herbeleggingsrente naar nul gaat.'; },
+ 'warn.unreachable': 'Deze netto-inspanning is onbereikbaar — zij overtreft uw salaris. Ingesteld is de hoogst mogelijke waarde.',
+ 'warn.inactive': 'In het eerste jaar bent u volgens uw gegevens niet meer werkzaam — er is geen salarisuitruil, dus ook geen netto-inspanning waaruit een bruto-inleg terug te rekenen valt. Controleer „Uitdiensttreding“ en „Leeftijd nu“.',
+
+ /* ---------------- Conclusie in gewone taal ---------------- */
+ 'verdict.lead': function(p){
+ return '<b>' + p.satz + '</b> ligt voorop met ' + p.wert + ' — ' + p.d2 + ' meer dan ' + p.nom2
+ + (p.nom3 ? ' en ' + p.d3 + ' meer dan ' + p.nom3 : '') + '.'; },
+ 'verdict.pp': function(p){ return p.v + ' procentpunten'; },
+ 'verdict.top': function(p, f){
+ return ' De grootste afzonderlijke post in het verschil ' + p.gen + ' met de privé-ETF-rekening is '
+ + '„' + p.label + '“ — en wel ' + (p.pro ? 'ten gunste' : 'ten laste') + ' ' + p.gen
+ + ', met ' + f.eur(Math.abs(p.wert)) + ' contante waarde. De volledige ontleding staat onder „Waardedrijvers“.'; },
+ 'verdict.band': function(p, f){
+ return '<span class="band">Hoe houdbaar is dat? Bij een brutorendement van ' + f.pct(p.lo, 1)
+ + ' in plaats van ' + f.pct(p.mid, 1) + ' zou het ' + p.vlo + ' zijn, bij ' + f.pct(p.hi, 1) + ' zou het '
+ + p.vhi + ' zijn — de volgorde '
+ + (p.stabil ? 'blijft binnen die marge dezelfde.'
+ : '<b>keert binnen die marge om</b>, de uitkomst draagt hier dus niet.')
+ + '</span>'; },
+ 'demo.text': '<b>Dit zijn nog voorbeeldwaarden</b> — 40 jaar oud, 75.000 € brutojaarsalaris, 300 € salarisuitruil per maand, wettelijk ziektekostenverzekerd. Vul onder „Uw gegevens“ uw eigen cijfers in; deze melding verdwijnt dan vanzelf.',
+
+ /* ---------------- Meelopende balk ---------------- */
+ 'sb.cap': function(p){ return p.label + ' · ' + p.unit + (p.kaufkraft ? ', koopkracht van vandaag' : ''); },
+ 'sb.aria': function(p){ return 'Uitkomst: ' + p.label; },
+
+ /* ---------------- Grafieken ---------------- */
+ 'tab.sens': 'Gevoeligheid',
+ 'tab.wf': 'Waardedrijvers',
+ 'tab.kap': 'Kapitaalverloop',
+ 'tab.zer': 'Maandontleding',
+ 'chart.error': function(p){ return 'Grafiek niet weer te geven: ' + p.msg; },
+ 'sens.readout': 'Gestippeld: uw huidige waarde. Ringen: snijpunten met de privérekening. Over de kromme bewegen of tikken voor waarden.',
+ 'sens.legendY': function(p){ return 'y: ' + p.label + ' (' + p.unit + ')'; },
+ 'sens.note': function(p){
+ return 'De laatst bewogen schuifregelaar wordt over zijn hele bereik doorgerekend — ' + p.n
+ + ' volledige modelruns. Nu: „' + p.label + '“. '
+ + 'Beweegt u een andere schuifregelaar, dan wisselt de kromme mee.'; },
+ 'sens.noteNetto': function(p, f){
+ return ' Let op: deze schuifregelaar verandert ook de netto-inspanning (hier ' + f.eur2(p.lo) + ' tot '
+ + f.eur2(p.hi) + ' per maand) en daarmee het bedrag dat in alle drie de opties wordt belegd. '
+ + 'Daarom zijn de drie krommen bij elke afzonderlijke x eerlijk vergelijkbaar, maar het niveau tussen '
+ + 'verschillende x niet. De knikken zitten bij de premiegrenzen ('
+ + f.eur(p.bbgkv) + ' voor KV/PV, ' + f.eur(p.bbgrv) + ' voor RV/AV) en bij de tariefschijfgrenzen.'; },
+ 'wf.up': 'verhoogt de opbrengst',
+ 'wf.down': 'verlaagt de opbrengst',
+ 'wf.legend': 'Contante waarde van de netto-opbrengst, koopkracht van vandaag',
+ 'wf.check': function(p, f){
+ return 'Controle: ' + f.eur(p.start) + ' + ' + f.eur(p.summe) + ' = ' + f.eur(p.start + p.summe)
+ + ' (soll ' + f.eur(p.ende) + ', afwijking ' + f.nf2(p.start + p.summe - p.ende) + ' €).'; },
+ 'wf.note': 'Telescoperende ontleding, daarom klopt zij exact — maar zij is <b>volgordeafhankelijk</b>: de effecten zijn niet additief scheidbaar, elke staaf meet de bijdrage <i>gegeven</i> de staven daarboven. Tik een staaf aan voor de afleiding.',
+ 'wf.barinfo': function(p){ return p.label + ': ' + p.note; },
+ 'wfb.vp.label': 'Wegvallen van de Vorabpauschale',
+ 'wfb.vp.note': 'Noch de bAV noch het Altersvorsorgedepot kent de Vorabpauschale (§ 18 InvStG). Gemeten als privérekening zonder Vorabpauschale minus met. De staaf kan negatief zijn: de Vorabpauschale loopt grotendeels in het spaarforfait, maar verhoogt wel de volle kostprijsbasis — dan is zij voor de privérekening netto een voordeel.',
+ 'wfb.zul.label': 'Toeslagen en aftrek bijzondere uitgaven',
+ 'wfb.zul.note': 'Geld van derden volgens het nieuwe toeslagmodel plus de aftrek volgens § 10a EStG. Gemeten door beide subsidiewegen uit te zetten.',
+ 'wfb.arch.label': 'Belastingarchitectuur (rest)',
+ 'wfb.arch.note': 'Tariefarbitrage t₀ − t₁ en al het overige. Als residu bepaald, zodat de keten exact sluit.',
+ 'wfb.agz.label': 'Werkgeversbijdrage',
+ 'wfb.agz.note': 'Geld van derden — het enige structurele voordeel van de bAV dat niet uit het belastingrecht komt. Gemeten door de bijdrage uit te zetten.',
+ 'wfb.tarif.label': 'Tariefarbitrage en rest',
+ 'wfb.tarif.note': 'Marginaal tarief bij inleggen minus bij uitkeren, plus al het overige. Als residu bepaald, zodat de keten exact sluit. Belastinguitstel alleen is waardeloos: (1−t)(1+r)ⁿ = (1+r)ⁿ(1−t), vermenigvuldiging commuteert.',
+ 'wfb.kvpv.label': 'KV/PV op Versorgungsbezüge',
+ 'wfb.kvpv.note': '§§ 229, 250 SGB V: het volle premietarief draagt de gepensioneerde alleen. Gemeten als verschil met de instelling „particulier verzekerd na pensionering“.',
+ 'wfb.ep.label': 'Verlies aan pensioenpunten',
+ 'wfb.ep.note': 'Salarisuitruil verlaagt het premieplichtig loon en daarmee het wettelijk pensioen. Netto tegengerekend.',
+ 'kap.rentbeg': 'Pensioeningang',
+ 'kap.swap': 'Kapitaal → lijfrenteaanspraak',
+ 'kap.legend': 'doorgetrokken: totaal &nbsp;·&nbsp; gestippeld: vrij beschikbaar',
+ 'kap.readout': function(p, f){
+ return 'Bij pensioeningang vastgezet: bAV ' + f.eur(p.bavGeb) + ' van ' + f.eur(p.bav)
+ + ' · AV-depot ' + f.eur(p.avGeb) + ' van ' + f.eur(p.av)
+ + ' · privérekening ' + f.eur(0) + ' van ' + f.eur(p.priv)
+ + '. De equivalente maanduitkering wordt verbruikt, daarom eindigt elke optie op nul.'; },
+ 'kap.note': function(p, f){
+ return 'Saldo binnen het product, in de uitkeringsfase vermeerderd met de netto herbelegde '
+ + 'uitkeringen (' + f.pct(p.wiederanl, 2) + ' na belasting) en verminderd met de equivalente '
+ + 'maanduitkering, die werkelijk wordt verbruikt. Daarom loopt elke optie exact op nul uit. '
+ + 'Omdat het verbruik alleen uit de herbelegging gaat en het productkapitaal in het product blijft, waar het '
+ + 'met het productrendement vóór belasting groeit, verlopen de krommen toch niet proportioneel. '
+ + '— De gestippelde lijn is het vrij beschikbare deel: de bAV is tot de pensioeningang '
+ + 'volledig vastgezet (§ 1b BetrAVG kent onvervreemdbaarheid, geen beschikbaarheid), bij het '
+ + 'Altersvorsorgedepot is een opname vóór 65 schadelijk voor de subsidie en vrij is alleen het meerdere boven het '
+ + 'jaarmaximum, de privérekening is altijd vrij. Dat is de enige as waarop een '
+ + 'kapitaaluitkering er goed uitziet. '
+ + (p.verrentet ? 'Omdat u de rekening in lijfrente omzet, gaat ook daar het kapitaal naar de aanbieder — de '
+ + 'kromme daalt dienovereenkomstig, hoewel er niets verloren is. ' : '')
+ + 'En nog eens uitdrukkelijk: de krommen tonen het vermogen uit DEZE ene beslissing, '
+ + 'niet uw totale vermogen.'; },
+ 'zer.netto': 'netto',
+ 'zer.tax': 'belasting',
+ 'zer.kv': 'KV/PV',
+ 'zer.pension': 'pensioen',
+ 'zer.legend': '<span><i style="background:#808080"></i>belasting</span><span><i style="background:#800000"></i>KV/PV</span><span><i style="background:#800080"></i>gederfd wettelijk pensioen</span><span style="margin-left:auto">gekleurde sokkel = wat er overblijft</span>',
+ 'zer.readout': 'Alles als constante maanduitkering in koopkracht van vandaag. Omdat annuïtering lineair is, tellen de blokken exact op.',
+ 'zer.note': function(p, f){
+ return 'De uitkeringsperiode is voor alle drie de opties identiek. Een kapitaaluitkering wordt niet '
+ + 'door twaalf gedeeld, maar met de herbeleggingsrente na belasting (' + f.pct(p.wiederanl, 2)
+ + ' p.j.) over dezelfde periode geannuïteerd. Wie het kapitaal opmaakt in plaats van belegt, staat '
+ + 'slechter.'; },
+
+ /* ---------------- Berekening ---------------- */
+ 'det.h.bav': 'bAV',
+ 'det.h.av': 'AV-depot',
+ 'det.h.priv': 'privé',
+ 'det.h.kennzahl': 'Kengetal',
+ 'det.h.wert': 'Waarde',
+ 'det.erg.netto': 'Totaal ingelegd uit het netto (nominaal)',
+ 'det.erg.fremd': 'Geld van derden (bijdrage resp. toeslagen)',
+ 'det.erg.kapital': 'Kapitaal bij start van de uitkering',
+ 'det.erg.brutto': 'Totaal bruto-uitkeringen',
+ 'det.erg.steuer': 'waarvan inkomsten-/bronbelasting',
+ 'det.erg.kvpv': 'waarvan ziektekosten- en langdurigezorgverzekering',
+ 'det.erg.rentenverlust': 'Verlies aan wettelijk pensioen (cumulatief)',
+ 'det.erg.nettoausz': 'Totaal netto-uitkeringen (nominaal)',
+ 'det.erg.bwausz': 'Contante waarde van de netto-uitkeringen',
+ 'det.erg.bwaufw': 'Contante waarde van de netto-inspanning',
+ 'det.erg.ertrag': 'Contante waarde van de netto-opbrengst',
+ 'det.erg.verhaeltnis': 'Verhouding opbrengst tot inspanning',
+ 'det.erg.irr': 'Interne rentevoet (nominaal)',
+ 'det.erg.vorsprung': 'Voorsprong op de privérekening',
+ 'det.mon.brutto': 'Bruto-uitkering per maand',
+ 'det.mon.steuer': 'minus inkomsten-/bronbelasting',
+ 'det.mon.kvpv': 'minus ziektekosten- en langdurigezorgverzekering',
+ 'det.mon.ep': 'minus verlies aan wettelijk pensioen',
+ 'det.mon.netto': 'NETTO PER MAAND (koopkracht van vandaag)',
+ 'det.diag.beitrag': 'Bruto-inleg bAV per maand',
+ 'det.diag.aufwand': 'Netto-inspanning per maand (eerste jaar)',
+ 'det.diag.grenzsteuer': 'Marginaal belastingtarief in de opbouwfase (eerste jaar)',
+ 'det.diag.ersparnis': 'Totale besparingsquote (belasting + premies), eerste jaar',
+ 'det.diag.svAG': 'werkelijke premiebesparing van de werkgever',
+ 'det.diag.svAN': 'werkelijke premiebesparing van de werknemer',
+ 'det.diag.ngef': 'Aandeel van de bAV-inleg zonder subsidie (eerste jaar)',
+ 'det.diag.aussch': 'Benutting van het wettelijk recht (4 % BBG-RV)',
+ 'det.diag.agzVar': 'waarvan werkgeversbijdrage: procentueel (eerste jaar)',
+ 'det.diag.agzFix': 'waarvan werkgeversbijdrage: vast bedrag (eerste jaar)',
+ 'det.diag.agzFixUeber4': 'vaste bijdrage boven de 4 %-ruimte (niet als premielast geboekt)',
+ 'det.diag.vbMonat': 'Versorgungsbezug per maand bij start van de uitkering',
+ 'det.diag.freibetrag': 'Vrijstelling Versorgungsbezüge in hetzelfde jaar',
+ 'det.diag.vbQuote': 'Verhouding Versorgungsbezug tot vrijstelling',
+ 'det.diag.kapFreiKapital': 'premievrij mogelijk kapitaal (kapitaaluitkering)',
+ 'det.diag.kapFreiRente': 'premievrij mogelijk kapitaal (levenslange lijfrente)',
+ 'det.diag.memoRest': 'MEMO: bAV-lijfrentebetalingen na de horizon',
+ 'det.diag.memoRestAv': 'MEMO: rekeninglijfrente na de horizon',
+ 'det.diag.wiederanl': 'Herbeleggingsrente na belasting',
+ 'det.diag.kapstEff': 'effectieve bronbelasting incl. soli/kerkbelasting',
+ 'det.diag.bestAnteil': 'Belast aandeel van het wettelijk pensioen',
+ 'det.warn.lead': 'U staat buiten de begunstigde corridor: ',
+ 'det.warn.aussch': 'Boven 100 % benutting bestaat geen wettelijk recht op salarisuitruil meer. ',
+ 'det.warn.ngef': 'Een merkbaar deel van de inleg is noch fiscaal noch premietechnisch begunstigd — die laag verdwijnt in een verzekeringsmantel zonder daarvoor iets terug te krijgen behalve de premieplicht in de KV. ',
+ 'det.warn.vb': 'De Versorgungsbezug overschrijdt de vrijstelling duidelijk; de beschermende werking van de absolute vrijstelling valt af als 1/kapitaal. ',
+ 'det.anspar.h.jahr': 'Jaar',
+ 'det.anspar.h.brutto': 'Bruto',
+ 'det.anspar.h.beitrag': 'bAV-inleg',
+ 'det.anspar.h.agzVar': 'WG-bijdr. %',
+ 'det.anspar.h.agzFix': 'WG vast',
+ 'det.anspar.h.sv': 'Premiebesp.',
+ 'det.anspar.h.st': 'Belastingbesp.',
+ 'det.anspar.h.netto': 'Netto-inspanning',
+ 'det.anspar.h.zul': 'Toeslagen',
+ 'det.anspar.h.kbav': 'Kapitaal bAV',
+ 'det.anspar.h.kav': 'Kapitaal AV',
+ 'det.anspar.h.kpriv': 'Kapitaal privé',
+ 'det.row.year': function(p){ return p.jahr + ' (leeftijd ' + p.alter + ')'; },
+ 'det.ausz.h.jahr': 'Jaar',
+ 'det.ausz.h.bavBr': 'bAV bruto',
+ 'det.ausz.h.kvpv': 'KV/PV',
+ 'det.ausz.h.steuer': 'Belasting',
+ 'det.ausz.h.mind': 'Pensioenkorting',
+ 'det.ausz.h.bavNet': 'bAV netto',
+ 'det.ausz.h.avBr': 'AV bruto',
+ 'det.ausz.h.avNet': 'AV netto',
+ 'det.ausz.h.privBr': 'privé bruto',
+ 'det.ausz.h.privNet': 'privé netto',
+ 'det.ann.intro': 'De rangorde hangt af van rechtsvragen die in 2026 nog niet alle zijn opgehelderd. De getallen tussen haakjes zijn subjectieve vertrouwensgraden.',
+ 'det.ann.h.annahme': 'Aanname',
+ 'det.ann.h.vertrauen': 'Vertrouwen',
+ 'det.ann.h.anmerkung': 'Opmerking',
+ 'det.ann.r1.a': 'Rekengrootheden SV 2026, § 32a-tarief 2026',
+ 'det.ann.r1.c': 'SVBezGrV 2026, Steuerfortentwicklungsgesetz',
+ 'det.ann.r2.a': 'KV/PV-plicht op Versorgungsbezüge',
+ 'det.ann.r2.c': '§§ 229, 250 SGB V',
+ 'det.ann.r3.a': 'Vrijstelling § 226 Abs. 2 S. 2 SGB V (KV)',
+ 'det.ann.r3.c': 'onbetwist',
+ 'det.ann.r4.a': 'Drempelbedrag in plaats van vrijstelling in de PV',
+ 'det.ann.r4.c': 'de meest voorkomende fout in adviesteksten',
+ 'det.ann.r5.a': 'Premievrijdom van de AV-depot-uitkering',
+ 'det.ann.r5.c': 'geen Versorgungsbezüge',
+ 'det.ann.r6.a': 'Half verschilbedrag voor niet-gesubsidieerde lagen',
+ 'det.ann.r6.c': '§ 22 Nr. 5 S. 2 Buchst. b juncto § 20 Abs. 1 Nr. 6 S. 2 EStG',
+ 'det.ann.r7.a': 'Bijdrage slechts tot de werkelijke besparing van de werkgever',
+ 'det.ann.r7.c': 'de tegenopvatting leest 15 % als zuiver forfait',
+ 'det.ann.r8.a': 'Maximum bijzondere uitgaven 2.340 €',
+ 'det.ann.r8.c': 'MODELAANNAME. Beslist of een kind de waarde van het AV-depot verhoogt of verlaagt',
+ 'det.ann.r9.a': 'KVdR-verplichte verzekering na pensionering verondersteld',
+ 'det.ann.r9.c': 'vrijwillig verzekerden niet getoetst',
+ 'det.ann.notmodelled': '<b>Niet gemodelleerd:</b> kortingen bij vervroegde pensionering, doorwerking van salarisuitruil op ziekte-, werkloosheids- en ouderschapsuitkering, nabestaandenvoorziening, insolventiedekking (PSVaG), overdraagbaarheid bij wisseling van werkgever, kortingen voor kinderen in de PV, de gunstigheidstoets volgens § 32d Abs. 6 EStG, beslag- en bijstandsbescherming, langlevenrisico voorbij de horizon.',
+ 'det.prinzip': '<p>Een vergelijking van <i>bruto-inleg</i> zou oneerlijk zijn: salarisuitruil komt uit het bruto, privésparen uit het netto. Daarom wordt de <b>netto-inspanning</b> gelijkgesteld:</p>'
+ + '<p style="font-family:var(--mono);font-size:.82rem;background:var(--chip);padding:9px 11px;border-radius:9px">netto-inspanning = bruto-inleg − loonbelastingbesparing − bespaard werknemersdeel sociale premies</p>'
+ + '<p>Precies dit bedrag wordt in alle drie de opties belegd. Wat overblijft is een vergelijking van <i>subsidiearchitecturen</i>, niet van inlegbedragen.</p>'
+ + '<p><b>Belastinguitstel is op zichzelf waardeloos:</b> (1−t)·(1+r)ⁿ = (1+r)ⁿ·(1−t). Vermenigvuldiging commuteert. Er blijven maar vier waardedrijvers over:</p>'
+ + '<ol style="padding-left:1.2em;margin:.3em 0"><li>tariefarbitrage t₀ − t₁</li>'
+ + '<li>geld van derden — werkgeversbijdrage respectievelijk toeslagen</li>'
+ + '<li>belastingvrije herbelegging — geen Vorabpauschale</li>'
+ + '<li>nieuwe heffingen die maar één optie treffen — KV/PV op Versorgungsbezüge</li></ol>'
+ + '<p>Punt 4 is het dominante nadeel van de bAV, punt 2 haar enige structurele voordeel. Het rendement van de bAV <b>daalt strikt monotoon in de inleghoogte</b>, omdat de vrijstelling absoluut is en haar beschermende werking als 1/K afneemt — er is geen inwendig optimum.</p>'
+ + '<p>Bij een gegeven netto-inspanning wordt de bruto-inleg per bisectie teruggerekend: N(B) is continu en strikt stijgend (dN/dB = 1 − marginaal premietarief − marginaal belastingtarief > 0), maar wegens de knikken bij 4 % en 8 % van de BBG-RV, bij de premiegrenzen en bij de tariefschijfgrenzen niet in gesloten vorm inverteerbaar. 34 halveringen leveren minder dan een tiende cent op.</p>',
+ 'det.t.prinzip': 'Het vergelijkingsprincipe',
+ 'det.t.erg': 'Uitkomst in detail',
+ 'det.s.erg': 'Alle drie de opties kosten in de opbouwfase precies hetzelfde bedrag uit het netto.',
+ 'det.t.mon': 'Maanduitkering, ontleed',
+ 'det.s.mon': 'Alle opties over dezelfde periode geannuïteerd, in koopkracht van vandaag. Omdat annuïtering lineair is, tellen de regels exact op.',
+ 'det.t.diag': 'Diagnose',
+ 'det.s.diag': 'Waar het aan ligt — en waar u buiten de begunstigde corridor staat.',
+ 'det.t.anspar': 'Opbouwfase, jaar voor jaar',
+ 'det.t.ausz': 'Uitkeringsfase, jaar voor jaar',
+ 'det.t.ann': 'Houdbaarheid van de aannames',
+
+ /* ---------------- Opslaan en delen ---------------- */
+ 'msg.linkCopied': 'Link gekopieerd. Wie hem opent, ziet precies deze cijfers — niets daarvan loopt via een server.',
+ 'msg.linkFailed': 'Kopiëren lukte niet. De link staat nu in de adresbalk.',
+ 'msg.loaded': 'Geladen.',
+ 'msg.loadError': function(p){ return 'Het bestand kon niet worden gelezen: ' + p.msg; },
+ 'msg.reset': 'Teruggezet op het basisgeval.',
+
+ /* ---------------- PWA ---------------- */
+ 'pwa.offline': '<b>Werkt offline.</b> De app staat nu in de browsercache en draait ook zonder verbinding. Installeren: op de iPhone „Deel“ → „Zet op beginscherm“, op Android het menu → „App installeren“.',
+ 'pwa.installAsk': '<b>Als app installeren?</b> Dan staat zij met een eigen pictogram op het beginscherm en draait offline. ',
+ 'pwa.installBtn': 'Installeren',
+ 'pwa.installed': '<b>Geïnstalleerd.</b> U vindt de app nu bij uw overige apps.',
+ 'pwa.declined': 'Prima — de app draait ook zo, en offline bovendien.',
+ 'pwa.file': '<b>U hebt het bestand rechtstreeks geopend</b> (<kbd>file://</kbd>). Alles rekent, alles wordt opgeslagen. Alleen de twee PWA-eigenschappen ontbreken: geen pictogram op het beginscherm en geen offlinecache — die zou u hier ook niet nodig hebben, het bestand staat immers al op het apparaat. Voor de volledige app-ervaring de map op een willekeurige HTTPS-webruimte zetten en van daaruit openen.'
+};
diff --git a/app/i18n.sa.js b/app/i18n.sa.js
new file mode 100644
index 0000000..f02b9f8
--- /dev/null
+++ b/app/i18n.sa.js
@@ -0,0 +1,610 @@
+/* =====================================================================
+ संस्कृतशब्दकोशः — PŪRṆA / VOLLSTÄNDIG (459 Schlüssel).
+ Seit der zweiten Fassung auch die langen Erläuterungstexte übersetzt.
+ Klassisches Sanskrit erlaubt sowohl Nominalstil (Kompositaketten) als
+ auch echte Konditional-/Kausalsätze (यदि...तर्हि, यतः, चेत्); für die
+ neuen Passagen wurde überwiegend finite Verbalsyntax statt langer
+ Samāsa-Ketten gewählt, um Fehler in der Kompositbildung zu vermeiden.
+ Der Optativ wird ebenso wie im Griechischen gemieden. Vertrauensgrad
+ in Syntax und Sandhi der neuen Fließtextpassagen etwa 30–35 % (die
+ Wirtschaftsprosa des Arthaśāstra bietet Vorbilder für Definitionen,
+ aber kaum für mehrstufige Paragraphenverweise); in die wiederverwen-
+ deten und neu geprägten Fachwörter weiterhin die dokumentierten 45 %.
+
+ Neu geprägt bzw. aus der Kernliste übertragen:
+ अधिकार / विधिदत्ताधिकार Rechtsanspruch (beide belegt, klassisch)
+ अंशदानसीमा Beitragsbemessungsgrenze (aus Kernliste)
+ मुक्ति Freibetrag/Freigrenze (belegt: „Befreiung“)
+ सहचर Ehe-/Lebenspartner (aus Kernliste)
+ अनुमति Zustimmung (belegt, klassischer Terminus)
+ सामाजिकबीमा gesetzliche Sozialversicherung (Kernliste)
+ Mathematische Formeln (N(B) = …, (1−t)(1+r)ⁿ) bleiben als Symbole
+ stehen, wie im Original. Zahlen weiterhin in lateinischen Ziffern.
+
+ ZUR WORTWAHL. Devanāgarī, klassisches Sanskrit, Nominativ für Beschrif-
+ tungen. Die altindische Wirtschaftssprache — vor allem das Arthaśāstra
+ — deckt den Kern erstaunlich gut ab:
+ मूलधन (mūladhana) Kapital, Hauptsumme (belegt, Arthaśāstra)
+ वृद्धि (vṛddhi) Zins (belegt)
+ कर (kara) Steuer (belegt)
+ वेतन (vetana) Lohn (belegt)
+ कर्मकर (karmakara) Arbeitnehmer (belegt)
+ नियोक्तृ (niyoktṛ) Arbeitgeber (belegt als „Anweisender“)
+ निधि (nidhi) Hinterlegtes, Depot (belegt)
+ वृत्ति (vṛtti) laufender Unterhalt, Rente (belegt)
+ शुद्ध (śuddha) netto / सकल (sakala) brutto (belegt, übertragen)
+ प्रतिशतम् (pratiśatam) Prozent (Standardbildung)
+ Neuprägungen bzw. moderne Sanskritbildungen ohne klassische Autorität —
+ Vertrauensgrad in die Idiomatik etwa 45 %:
+ मुद्रास्फीति (mudrāsphīti) Inflation
+ आरोग्यसुरक्षा Krankenversicherung
+ वार्धक्यनिधि Altersvorsorge
+ ETF bleibt als lateinische Fremdabkürzung stehen.
+ Zahlen erscheinen in lateinischen Ziffern mit deutscher Gruppierung —
+ Devanāgarī-Ziffern neben „€“ wären eine Schikane, keine Genauigkeit.
+ Die Gesetzesfundstellen bleiben deutsch: es gibt sie amtlich nur so.
+ ===================================================================== */
+window.I18N_SA = {
+ 'f.I:gehalt.label': 'अद्यतनं वार्षिकं सकलवेतनम्',
+ 'f.I:beitrag.label': 'मासिकं bAV-अंशदानं सकलम्',
+ 'f.I:netto_ziel.label': 'मासिको शुद्धव्ययः',
+ 'f.I:agzus.label': 'नियोक्तुः अनुदानम्',
+ 'f.I:agz_fix.label': 'अतिरिक्तं निश्चितम् अनुदानम्',
+ 'f.I:agz_fix_dyn.label': 'निश्चितम् अनुदानं वर्धयितुम्',
+ 'f.I:agz_fix_dyn.o0': 'नाममात्रेण स्थिरम्',
+ 'f.I:agz_fix_dyn.o1': 'वेतनेन सह',
+ 'f.I:agzus_sv.label': 'अनुदानप्रकारः',
+ 'f.I:agzus_sv.o0': 'पूर्णम् अंशदानम्',
+ 'f.I:agzus_sv.o1': 'मुक्तभागः एव',
+ 'f.I:agzus_sv.o2': 'यथार्था बचतिः',
+ 'f.I:dyn.label': 'अंशदानं वर्धयितुम्',
+ 'f.I:dyn.o1': 'वेतनेन सह',
+ 'f.I:dyn.o0': 'नाममात्रेण स्थिरम्',
+ 'f.I:rendite.label': 'ETF-सकललाभः प्रतिवर्षम्',
+ 'f.I:alter.label': 'अद्यतनं वयः',
+ 'f.I:alter.unit': 'वर्षाणि',
+ 'f.I:rentbeg.label': 'दानस्य आरम्भः',
+ 'f.I:rentbeg.unit': 'वर्षाणि',
+ 'f.I:kv_ruhe.label': 'वार्धक्ये आरोग्यसुरक्षा',
+ 'f.I:kv_ruhe.o1': 'राजकीया',
+ 'f.I:kv_ruhe.o2': 'वैयक्तिका',
+ 'f.I:auszform.label': 'bAV-दानम्',
+ 'f.I:auszform.o1': 'मूलधनम्',
+ 'f.I:auszform.o2': 'आजीवनवृत्तिः',
+ 'f.I:teilkap.label': 'Altersvorsorgedepot: आरम्भे सकृद्दानम्',
+ 'f.I:av_auszform.label': 'Altersvorsorgedepot: अवशिष्टम्',
+ 'f.I:av_auszform.o1': 'दानयोजना',
+ 'f.I:av_auszform.o2': 'आजीवनवृत्तिः',
+ 'f.I:agz_fix_min.label': 'निश्चितानुदानार्थं न्यूनतमं स्वांशदानम्',
+ 'f.I:rentfak_av.label': 'Altersvorsorgedepot-वृत्तिगुणकः',
+ 'f.I:rentfak_av.unit': '10.000 € प्रति €',
+ 'f.I:rentdyn_av.label': 'निधिवृत्तेः वर्धनं प्रतिवर्षम्',
+ 'f.I:rentfak.label': 'bAV-वृत्तिगुणकः',
+ 'f.I:rentfak.unit': '10.000 € प्रति €',
+ 'f.I:rentdyn.label': 'bAV-वृत्तेः वर्धनं प्रतिवर्षम्',
+ 'f.I:fuenftel.label': 'पञ्चमांशनियमं परीक्षितुम्',
+ 'f.I:fuenftel.o0': 'न (सावधानम्)',
+ 'f.I:fuenftel.o1': 'आम्',
+ 'f.I:planende.label': 'तुलनासीमा वयःपर्यन्तम्',
+ 'f.I:planende.unit': 'वर्षाणि',
+ 'f.I:ausscheid.label': 'कर्मणः निवृत्तिः',
+ 'f.I:ausscheid.unit': 'वर्षाणि',
+ 'f.I:tzalter.label': 'वयसः आरभ्य अर्धकालकर्म',
+ 'f.I:tzalter.unit': 'वर्षाणि',
+ 'f.I:tzfaktor.label': 'अर्धकालगुणकः',
+ 'f.I:gsteig.label': 'वेतनवृद्धिः प्रतिवर्षम्',
+ 'f.I:stkl.label': 'करनिर्धारणप्रकारः',
+ 'f.I:stkl.o1': 'पृथक्',
+ 'f.I:stkl.o3': 'सम्मिलितम् (विभाजनेन)',
+ 'f.I:partner.label': 'सहचरस्य करयोग्या आयः',
+ 'f.I:kist.label': 'धर्मस्थानकरस्य दरः',
+ 'f.I:tarifanp.label': 'करसीमानां समायोजनं प्रतिवर्षम्',
+ 'f.I:kinder.label': 'सन्तानसंख्या',
+ 'f.I:kind_jahre.label': 'सन्तानानुदानयुक्तानि वर्षाणि',
+ 'f.I:kind_jahre.unit': 'वर्षाणि',
+ 'f.I:kinderlos.label': 'अपत्यरहितः (परिचर्याधिकभारः)',
+ 'f.I:kinderlos.o0': 'न',
+ 'f.I:kinderlos.o1': 'आम्',
+ 'f.I:k_bav.label': 'bAV-उत्पादव्ययः प्रतिवर्षम्',
+ 'f.I:k_av.label': 'Altersvorsorgedepot-व्ययः प्रतिवर्षम्',
+ 'f.I:k_priv.label': 'वैयक्तिक-ETF-निधेः व्ययः प्रतिवर्षम्',
+ 'f.I:infl.label': 'मुद्रास्फीतिः प्रतिवर्षम्',
+ 'f.I:sonst_zve.label': 'वार्धक्ये अन्या करयोग्या आयः',
+ 'f.I:rente_br.label': 'राजकीया सकलवृत्तिः प्रतिवर्षम्',
+ 'f.P:bbg_rv.label': 'वार्धक्यबीमायाः अंशदानसीमा (वार्षिकी)',
+ 'f.P:bbg_kv.label': 'आरोग्य-परिचर्ययोः अंशदानसीमा',
+ 'f.P:bezug.label': 'Bezugsgröße (मासिकी)',
+ 'f.P:de_rv.label': 'माध्यमं वेतनम् (RV)',
+ 'f.P:rw.label': 'वृत्तिबिन्दोः वर्तमानं मूल्यम्',
+ 'f.P:rw.unit': '€',
+ 'f.P:rv_an.label': 'वार्धक्यांशदानं, कर्मकरभागः',
+ 'f.P:av_an.label': 'निष्कर्मतांशदानं, कर्मकरभागः',
+ 'f.P:kv_allg.label': 'आरोग्यबीमायाः सामान्यो दरः',
+ 'f.P:kv_zus.label': 'आरोग्यबीमायाः माध्यमम् अतिरिक्तांशदानम्',
+ 'f.P:pv_ges.label': 'परिचर्याबीमायाः पूर्णो दरः',
+ 'f.P:pv_an.label': 'परिचर्या, कर्मकरभागः',
+ 'f.P:pv_kl.label': 'परिचर्या, अपत्यरहितानाम् अधिकभारः',
+ 'f.P:gfb.label': 'मूलकरमुक्तिः (प्रथमक्षेत्रस्य अन्तः)',
+ 'f.P:e2.label': 'द्वितीयक्षेत्रस्य अन्तः',
+ 'f.P:e3.label': 'तृतीयक्षेत्रस्य अन्तः',
+ 'f.P:e4.label': 'पञ्चमक्षेत्रस्य आरम्भः (धनिकरः)',
+ 'f.P:a2.label': 'गुणकः a₂',
+ 'f.P:b2.label': 'गुणकः b₂',
+ 'f.P:a3.label': 'गुणकः a₃',
+ 'f.P:b3.label': 'गुणकः b₃',
+ 'f.P:c3.label': 'ध्रुवाङ्कः c₃',
+ 'f.P:c4.label': 'ध्रुवाङ्कः c₄',
+ 'f.P:c5.label': 'ध्रुवाङ्कः c₅',
+ 'f.P:soli.label': 'सामञ्जस्याधिभारः',
+ 'f.P:soli_fg.label': 'अधिभारस्य मुक्तिसीमा',
+ 'f.P:soli_mz.label': 'मार्दवक्षेत्रस्य सीमाभारः',
+ 'f.P:an_pausch.label': 'कर्मकराणां सामान्या कटौतिः',
+ 'f.P:sa_pausch.label': 'विशेषव्ययाणां सामान्या कटौतिः',
+ 'f.P:kapst.label': 'मूलधनकरस्य दरः',
+ 'f.P:tfs.label': 'अंशनिधीनाम् आंशिकी करमुक्तिः',
+ 'f.P:sparerpb.label': 'सञ्चयकर्तुः सामान्या कटौतिः',
+ 'f.P:basiszins.label': 'Vorabpauschale-मूलवृद्धिः',
+ 'f.P:vp_faktor.label': 'मूललाभस्य गुणकः',
+ 'f.P:st_frei_q.label': 'करमुक्तम् § 3 Nr. 63 (BBG-RV-भागः)',
+ 'f.P:sv_frei_q.label': 'अंशदानमुक्तम् (BBG-RV-भागः)',
+ 'f.P:zul_g1.label': 'अनुदानं प्रथमसोपानम् (स्वांशदानस्य € प्रति)',
+ 'f.P:zul_s1.label': 'प्रथमसोपानस्य सीमा',
+ 'f.P:zul_g2.label': 'अनुदानं द्वितीयसोपानम् (स्वांशदानस्य € प्रति)',
+ 'f.P:zul_s2.label': 'द्वितीयसोपानस्य सीमा',
+ 'f.P:kind_zul.label': 'प्रतिसन्तानम् अनुदानम्',
+ 'f.P:av_max.label': 'प्रतिवर्षं परमं निक्षेपः',
+ 'f.P:av_sa_max.label': '§ 10a-कटौत्याः परमा सीमा',
+ 'f.P:ertragsq.label': 'लाभभागः (वयः 67)',
+ 'f.P:halb.label': 'अन्तरराशेः करयोग्यो भागः',
+
+ /* ---------------- रूपरेखा, गवाक्षशीर्षकाणि ---------------- */
+ 'app.title': 'वार्धक्यनिधितुलना',
+ 'hdr.title': 'वार्धक्यनिधि&#8209;तुलना',
+ 'win.header': 'वार्धक्यनिधितुलना',
+ 'win.result': 'फलम्',
+ 'win.input': 'भवतः विवरणानि',
+ 'win.chart': 'रेखाचित्राणि',
+ 'win.extra': 'अपराणि विवरणानि',
+ 'win.calc': 'गणनामार्गः',
+ 'win.share': 'रक्षितुं वितरितुं च',
+ 'win.min': 'सङ्कोचयितुम्',
+ 'win.restore': 'पुनःस्थापयितुम्',
+ 'win.n': function(p){ return 'गवाक्षः ' + p.n; },
+ 'ui.share': 'मम अङ्कैः सह सम्बन्धं प्रतिलिख्',
+ 'ui.export': 'सञ्चिकारूपेण रक्षितुम्',
+ 'ui.import': 'सञ्चिकां स्थापयितुम्',
+ 'ui.reset': 'सर्वं पुनःस्थापयितुम्',
+ 'ui.pin.set': 'निर्देशरूपेण स्मर्तुम्',
+ 'ui.pin.clear': 'निर्देशं मोक्तुम्',
+ 'ui.lang': 'भाषा',
+ 'ui.lang.aria': 'भाषां चिनु',
+ 'ui.lang.partial': 'आंशिकम् एव अनूदितम्',
+ 'ui.lang.partialNote': 'इयं भाषा <b>आंशिकम् अनूदिता</b> — रूपरेखा, क्षेत्रनामानि, सारणीशीर्षकाणि, रेखाचित्रसंज्ञाश्च सन्ति। दीर्घाणि विधिविवरणानि — क्षेत्रेषु <span class="qm" style="cursor:default">?</span>-चिह्नस्य पाठाः, निर्णयः, गणनामार्गश्च — जर्मनभाषायां दृश्यन्ते। विधिनिर्देशाः (BetrAVG, EStG, SGB V) सर्वासु भाषासु जर्मनभाषायाम् एव तिष्ठन्ति: शासकीयरूपेण अन्यथा ते न सन्ति।',
+ 'sb.up': 'उपरि फलं प्रति',
+
+ /* ---------------- त्रयो विकल्पाः ---------------- */
+ 'opt.bav.name': 'bAV (वेतनपरिवर्तनम्)',
+ 'opt.bav.short': 'bAV',
+ 'opt.bav.nom': 'औद्योगिको वार्धक्यनिधिः',
+ 'opt.bav.satz': 'औद्योगिको वार्धक्यनिधिः',
+ 'opt.bav.gen': 'bAV-इत्यस्य',
+ 'opt.av.name': 'Altersvorsorgedepot',
+ 'opt.av.short': 'AV-निधिः',
+ 'opt.av.nom': 'Altersvorsorgedepot',
+ 'opt.av.satz': 'Altersvorsorgedepot',
+ 'opt.av.gen': 'Altersvorsorgedepot-इत्यस्य',
+ 'opt.priv.name': 'वैयक्तिको ETF-निधिः',
+ 'opt.priv.short': 'वैयक्तिकः',
+ 'opt.priv.nom': 'वैयक्तिको ETF-निधिः',
+ 'opt.priv.satz': 'वैयक्तिको ETF-निधिः',
+ 'opt.priv.gen': 'वैयक्तिकस्य ETF-निधेः',
+
+ /* ---------------- सूचकाङ्काः ---------------- */
+ 'metric.monat.label': 'मासिकं दानम्',
+ 'metric.monat.unit': '€/मासः',
+ 'metric.ertrag.label': 'शुद्धलाभः (वर्तमानमूल्यम्)',
+ 'metric.ertrag.unit': '€',
+ 'metric.irr.label': 'आन्तरिको वृद्धिदरः',
+ 'metric.irr.unit': '% प्रतिवर्षम्',
+ 'metric.kapital.label': 'वृत्त्यारम्भे मूलधनम्',
+ 'metric.kapital.unit': '€',
+ 'metric.pa': ' प्रतिवर्षम्',
+ 'metric.pp': ' प्रतिशतबिन्दवः',
+ 'metric.short.monat': 'मासः',
+ 'metric.short.ertrag': 'लाभः',
+ 'metric.short.irr': 'IRR',
+ 'metric.short.kapital': 'मूलधनम्',
+
+ /* ---------------- निवेशक्षेत्राणि ---------------- */
+ 'unit.pct': '%',
+ 'unit.eur': '€',
+ 'unit.eurm': '€/मासः',
+ 'ui.hintFor': function(p){ return 'विवरणम् — ' + p.label; },
+ 'ui.cnt.legal': function(p){ return p.n + ' गणनाराशयः'; },
+ 'ui.cnt.fields': function(p){ return p.n + ' क्षेत्राणि'; },
+ 'group.bav': 'अनुदानं दानप्रकाराश्च विस्तरेण',
+ 'group.person': 'कालरेखा, निवृत्तिः, अर्धकालकर्म',
+ 'group.steuer': 'करः, करनिर्धारणम्, सन्तानाः',
+ 'group.markt': 'व्ययाः मुद्रास्फीतिश्च',
+ 'group.ruhe': 'वार्धक्यम्',
+ 'group.p_sv': 'गणनाराशयः — सामाजिकबीमा 2026',
+ 'group.p_est': 'गणनाराशयः — आयकरसारणी 2026 (§ 32a EStG)',
+ 'group.p_kap': 'गणनाराशयः — मूलधनलाभकरः निधिकरश्च',
+ 'group.p_bav': 'गणनाराशयः — औद्योगिकः अनुदानितश्च वार्धक्यनिधिः',
+
+ /* ---------------- फलपत्रकाणि ---------------- */
+ 'card.lead': 'अग्रे',
+ 'card.unchanged': 'अपरिवर्तितम्',
+ 'base.pinned': 'स्मृतस्थितेः सापेक्षं Δ',
+ 'base.delta': function(p){ return 'Δ ' + p.desc; },
+ 'base.none': 'कञ्चित् सर्पकं चालय — परिवर्तनम् अत्र Δ-रूपेण दृश्यते।',
+ 'base.desc.prev': 'पूर्वा स्थितिः',
+ 'base.desc.pinned': 'स्मृता स्थितिः',
+ 'base.desc.change': function(p){ return '„' + p.label + '“ इत्यस्य परिवर्तनात् पूर्वम्'; },
+ 'verdict.pp': function(p){ return p.v + ' प्रतिशतबिन्दवः'; },
+
+ /* ---------------- अनुगामिनी पट्टिका ---------------- */
+ 'sb.cap': function(p){ return p.label + ' · ' + p.unit + (p.kaufkraft ? ', अद्यतनक्रयशक्त्या' : ''); },
+ 'sb.aria': function(p){ return 'फलम् — ' + p.label; },
+
+ /* ---------------- रेखाचित्राणि ---------------- */
+ 'tab.sens': 'संवेदनशीलता',
+ 'tab.wf': 'मूल्यकारणानि',
+ 'tab.kap': 'मूलधनगतिः',
+ 'tab.zer': 'मासिकविभाजनम्',
+ 'chart.error': function(p){ return 'रेखाचित्रं दर्शयितुं न शक्यते: ' + p.msg; },
+ 'sens.legendY': function(p){ return 'y: ' + p.label + ' (' + p.unit + ')'; },
+ 'wf.up': 'लाभं वर्धयति',
+ 'wf.down': 'लाभं ह्रासयति',
+ 'wf.legend': 'शुद्धलाभस्य वर्तमानमूल्यम्, अद्यतनक्रयशक्त्या',
+ 'wf.barinfo': function(p){ return p.label + ': ' + p.note; },
+ 'wfb.vp.label': 'Vorabpauschale-इत्यस्य लोपः',
+ 'wfb.zul.label': 'अनुदानानि विशेषव्ययकटौतिश्च',
+ 'wfb.arch.label': 'करसंरचना (अवशिष्टम्)',
+ 'wfb.agz.label': 'नियोक्तुः अनुदानम्',
+ 'wfb.tarif.label': 'करसारणीभेदः अवशिष्टं च',
+ 'wfb.kvpv.label': 'Versorgungsbezüge-उपरि आरोग्य-परिचर्यांशदानम्',
+ 'wfb.ep.label': 'वृत्तिबिन्दूनां हानिः',
+ 'kap.rentbeg': 'वृत्त्यारम्भः',
+ 'kap.swap': 'मूलधनम् → वृत्त्यधिकारः',
+ 'kap.legend': 'अखण्डा रेखा: समग्रम् &nbsp;·&nbsp; खण्डिता: मुक्तम्',
+ 'zer.netto': 'शुद्धम्',
+ 'zer.tax': 'करः',
+ 'zer.kv': 'आरोग्य/परिचर्या',
+ 'zer.pension': 'वृत्तिः',
+ 'zer.legend': '<span><i style="background:#808080"></i>करः</span><span><i style="background:#800000"></i>आरोग्य/परिचर्या</span><span><i style="background:#800080"></i>नष्टा राजकीया वृत्तिः</span><span style="margin-left:auto">वर्णितं पीठम् = यत् अवशिष्यते</span>',
+
+ /* ---------------- गणनामार्गः ---------------- */
+ 'det.h.bav': 'bAV',
+ 'det.h.av': 'AV-निधिः',
+ 'det.h.priv': 'वैयक्तिकः',
+ 'det.h.kennzahl': 'सूचकाङ्कः',
+ 'det.h.wert': 'मूल्यम्',
+ 'det.erg.netto': 'शुद्धात् निक्षिप्तं समग्रम् (नाममात्रम्)',
+ 'det.erg.fremd': 'परधनम् (अनुदानं वा प्रोत्साहनं वा)',
+ 'det.erg.kapital': 'दानारम्भे मूलधनम्',
+ 'det.erg.brutto': 'सकलदानानां योगः',
+ 'det.erg.steuer': 'तत्र आय-मूलधनकरः',
+ 'det.erg.kvpv': 'तत्र आरोग्य-परिचर्याबीमा',
+ 'det.erg.rentenverlust': 'राजकीयवृत्तेः हानिः (सञ्चिता)',
+ 'det.erg.nettoausz': 'शुद्धदानानां योगः (नाममात्रः)',
+ 'det.erg.bwausz': 'शुद्धदानानां वर्तमानमूल्यम्',
+ 'det.erg.bwaufw': 'शुद्धव्ययस्य वर्तमानमूल्यम्',
+ 'det.erg.ertrag': 'शुद्धलाभस्य वर्तमानमूल्यम्',
+ 'det.erg.verhaeltnis': 'लाभस्य व्ययेन सह अनुपातः',
+ 'det.erg.irr': 'आन्तरिको वृद्धिदरः (नाममात्रः)',
+ 'det.erg.vorsprung': 'वैयक्तिकनिधेः अपेक्षया आधिक्यम्',
+ 'det.mon.brutto': 'मासिकं सकलदानम्',
+ 'det.mon.steuer': 'आय-मूलधनकरं विहाय',
+ 'det.mon.kvpv': 'आरोग्य-परिचर्याबीमां विहाय',
+ 'det.mon.ep': 'राजकीयवृत्तेः हानिं विहाय',
+ 'det.mon.netto': 'मासिकं शुद्धम् (अद्यतनक्रयशक्त्या)',
+ 'det.diag.beitrag': 'मासिकं सकलं bAV-अंशदानम्',
+ 'det.diag.aufwand': 'मासिकः शुद्धव्ययः (प्रथमे वर्षे)',
+ 'det.diag.grenzsteuer': 'सञ्चयकाले सीमाकरदरः (प्रथमे वर्षे)',
+ 'det.diag.ersparnis': 'समग्रा बचतिदरः (करः + अंशदानम्), प्रथमे वर्षे',
+ 'det.diag.svAG': 'नियोक्तुः यथार्था अंशदानबचतिः',
+ 'det.diag.svAN': 'कर्मकरस्य यथार्था अंशदानबचतिः',
+ 'det.diag.ngef': 'अनुदानरहितानां bAV-अंशदानानां भागः (प्रथमे वर्षे)',
+ 'det.diag.aussch': 'विधिदत्ताधिकारस्य उपयोगः (BBG-RV-इत्यस्य 4 %)',
+ 'det.diag.agzVar': 'तत्र नियोक्तुः अनुदानम् — प्रतिशतरूपेण (प्रथमे वर्षे)',
+ 'det.diag.agzFix': 'तत्र नियोक्तुः अनुदानम् — निश्चिता राशिः (प्रथमे वर्षे)',
+ 'det.diag.agzFixUeber4': '4 %-पात्रात् अधिकं निश्चितानुदानम् (अंशदानभाररूपेण न गणितम्)',
+ 'det.diag.vbMonat': 'दानारम्भे मासिको Versorgungsbezug',
+ 'det.diag.freibetrag': 'तस्मिन्नेव वर्षे Versorgungsbezüge-मुक्तिः',
+ 'det.diag.vbQuote': 'Versorgungsbezug-मुक्त्योः अनुपातः',
+ 'det.diag.kapFreiKapital': 'अंशदानमुक्तं सम्भाव्यं मूलधनम् (सकृद्दानम्)',
+ 'det.diag.kapFreiRente': 'अंशदानमुक्तं सम्भाव्यं मूलधनम् (आजीवनवृत्तिः)',
+ 'det.diag.memoRest': 'स्मरणम् — सीमायाः परं bAV-वृत्तिदानानि',
+ 'det.diag.memoRestAv': 'स्मरणम् — सीमायाः परं निधिवृत्तिः',
+ 'det.diag.wiederanl': 'करानन्तरं पुनर्निवेशवृद्धिः',
+ 'det.diag.kapstEff': 'अधिभार-धर्मस्थानकरसहितः यथार्थो मूलधनकरः',
+ 'det.diag.bestAnteil': 'राजकीयवृत्तेः करयोग्यो भागः',
+ 'det.anspar.h.jahr': 'वर्षम्',
+ 'det.anspar.h.brutto': 'सकलम्',
+ 'det.anspar.h.beitrag': 'bAV-अंशदानम्',
+ 'det.anspar.h.agzVar': 'अनुदानं %',
+ 'det.anspar.h.agzFix': 'अनुदानं निश्चितम्',
+ 'det.anspar.h.sv': 'अंशदानबचतिः',
+ 'det.anspar.h.st': 'करबचतिः',
+ 'det.anspar.h.netto': 'शुद्धव्ययः',
+ 'det.anspar.h.zul': 'अनुदानानि',
+ 'det.anspar.h.kbav': 'मूलधनं bAV',
+ 'det.anspar.h.kav': 'मूलधनं AV',
+ 'det.anspar.h.kpriv': 'मूलधनं वैयक्तिकम्',
+ 'det.row.year': function(p){ return p.jahr + ' (वयः ' + p.alter + ')'; },
+ 'det.ausz.h.jahr': 'वर्षम्',
+ 'det.ausz.h.bavBr': 'bAV सकलम्',
+ 'det.ausz.h.kvpv': 'आरोग्य/परिचर्या',
+ 'det.ausz.h.steuer': 'करः',
+ 'det.ausz.h.mind': 'वृत्तिह्रासः',
+ 'det.ausz.h.bavNet': 'bAV शुद्धम्',
+ 'det.ausz.h.avBr': 'AV सकलम्',
+ 'det.ausz.h.avNet': 'AV शुद्धम्',
+ 'det.ausz.h.privBr': 'वैयक्तिकं सकलम्',
+ 'det.ausz.h.privNet': 'वैयक्तिकं शुद्धम्',
+ 'det.ann.h.annahme': 'प्रकल्पना',
+ 'det.ann.h.vertrauen': 'विश्वासः',
+ 'det.ann.h.anmerkung': 'टिप्पणी',
+ 'det.ann.r1.a': 'सामाजिकबीमाराशयः 2026, § 32a-सारणी 2026',
+ 'det.ann.r1.c': 'SVBezGrV 2026, Steuerfortentwicklungsgesetz',
+ 'det.ann.r2.a': 'Versorgungsbezüge-उपरि आरोग्य-परिचर्यांशदानस्य बाध्यता',
+ 'det.ann.r2.c': '§§ 229, 250 SGB V',
+ 'det.ann.r3.a': 'मुक्तिः § 226 Abs. 2 S. 2 SGB V (आरोग्यम्)',
+ 'det.ann.r3.c': 'अविवादितम्',
+ 'det.ann.r4.a': 'परिचर्यायां मुक्तेः स्थाने सीमा',
+ 'det.ann.r4.c': 'परामर्शग्रन्थेषु सर्वाधिका दोषमूलम्',
+ 'det.ann.r5.a': 'AV-निधिदानस्य अंशदानमुक्तिः',
+ 'det.ann.r5.c': 'तानि Versorgungsbezüge न भवन्ति',
+ 'det.ann.r6.a': 'अनुदानरहितस्तरेभ्यः अन्तरराशेः अर्धम्',
+ 'det.ann.r6.c': '§ 22 Nr. 5 S. 2 Buchst. b i.V.m. § 20 Abs. 1 Nr. 6 S. 2 EStG',
+ 'det.ann.r7.a': 'नियोक्तुः यथार्थबचतिपर्यन्तम् एव अनुदानम्',
+ 'det.ann.r7.c': 'विपक्षमतं 15 % इति केवलं सामान्यराशिं मन्यते',
+ 'det.ann.r8.a': 'विशेषव्ययाणां परमा सीमा 2.340 €',
+ 'det.ann.r8.c': 'प्रतिरूपप्रकल्पना। सन्तानः AV-निधेः मूल्यं वर्धयति ह्रासयति वा इति एषैव निर्णयति',
+ 'det.ann.r9.a': 'वार्धक्ये KVdR-बाध्यबीमा प्रकल्पिता',
+ 'det.ann.r9.c': 'स्वेच्छया बीमिताः न परीक्षिताः',
+ 'det.t.prinzip': 'तुलनासिद्धान्तः',
+ 'det.t.erg': 'फलं विस्तरेण',
+ 'det.t.mon': 'मासिकं दानं विभक्तम्',
+ 'det.t.diag': 'निदानम्',
+ 'det.t.anspar': 'सञ्चयकालः, वर्षं प्रति वर्षम्',
+ 'det.t.ausz': 'दानकालः, वर्षं प्रति वर्षम्',
+ 'det.t.ann': 'प्रकल्पनानां दृढता',
+
+ /* ---------------- रक्षितुं वितरितुं च ---------------- */
+ 'msg.loaded': 'स्थापितम्।',
+ 'msg.loadError': function(p){ return 'सञ्चिका पठितुं न शक्यते: ' + p.msg; },
+ 'msg.reset': 'मूलस्थितौ पुनःस्थापितम्।',
+
+ /* ---------------- PWA ---------------- */
+ 'pwa.installBtn': 'संस्थापयितुम्',
+ 'pwa.installed': '<b>संस्थापितम्।</b> इदानीम् अन्यैः अनुप्रयोगैः सह अनुप्रयोगं प्राप्स्यसि।',
+
+ /* ---------------- दीर्घानि विधिविवरणानि — द्वितीयं संस्करणम् ---------------- */
+ 'f.I:gehalt.hint': 'एकवारदानानि विहाय। एतत् तव करसीमां निर्धारयति, अंशदानसीमायाः परं वा असि इति च।',
+ 'f.I:beitrag.hint': 'सकलम् अंशदानं § 1a BetrAVG इत्यनुसारेण। अधिकारः वार्धक्यबीमायाः अंशदानसीमायाः 4 प्रतिशतं यावत् वर्तते; ततः परं नियोक्तुः अनुमतिः आवश्यकी।',
+ 'f.I:netto_ziel.hint': 'यत् मूल्यं तव धनं प्रथमे वर्षे ह्रासयति — सा एव यथार्थतया त्यक्ता उपभोगशक्तिः। तदेव मूल्यं त्रिषु विकल्पेषु स्थाप्यते, यथा सम्यक् तुलना भवति। अनया सीमया अंशदानं सर्वदा वर्धते, पुनश्च गणयितुं शक्यते।',
+ 'f.I:agzus.hint': 'विधिना न्यूनतमम् 15 प्रतिशतम् (§ 1a Abs. 1a BetrAVG); बहवः नियोक्तारः अधिकं ददति। वैयक्तिकनिधिना सह तुलनार्थं, यत्र अनुदानं वैयक्तिकं धनं च तुल्यौ स्तः, गणनानुपातेन निर्णेतुं शक्यते।',
+ 'f.I:agz_fix.hint': 'निश्चितम् अनुदानम्, करसन्धिना कर्मसन्धिना वा निर्धारितम् — यथा Deutsche Bahn-संस्थायां बहुषु च अन्येषु सन्धिषु, यत्र अनुदानं § 1a Abs. 1a BetrAVG-इत्यस्य 15 प्रतिशतं पूरयति। एतत् नियोक्तुः अंशदानं § 3 Nr. 63 EStG-अनुसारेण, प्रथमं 8-प्रतिशत-4-प्रतिशत-पात्रे पूरयति (§ 1 Abs. 1 S. 1 Nr. 9 SvEV): तव स्वकीयं परिवर्तनं ततः न्यूनतरं महार्घतरं च भवति।',
+ 'f.I:agz_fix_dyn.hint': 'निर्धारितानि मूल्यानि सन्धौ नाममात्रेण तिष्ठन्ति, नूतनैः सन्धिभिः एव वर्धन्ते — प्रथमं नाममात्रेण अपरिवर्तितं तिष्ठति। 27 वर्षेषु 2 प्रतिशतमुद्रास्फीत्या शेषं भवति 1,02⁻²⁷ ≈ 0,59; यः एतत् अल्पं मन्यते, सः „वेतनेन सह“ इति चिनोतु।',
+ 'f.I:agzus_sv.hint': '„यथार्था बचतिः“ इति विधिवचनम्: § 1a Abs. 1a BetrAVG नियोक्तारं तावत् अनुदातुम् आदिशति, यावत् सः यथार्थतया अंशदानात् बचति। यदि तव वेतनम् उभयोः सीमयोः परं वर्तते, तर्हि सः न किमपि बचति, न च किमपि ऋणी भवति। अतः प्रथमा गणना धने 21 प्रतिशतं यावत् सूक्ष्मतरा भवति। अस्याः गणनायाः विश्वासः 75 प्रतिशतम्।',
+ 'f.I:dyn.hint': 'यदि अंशदानं वेतनेन सह वर्धते, तर्हि 8-प्रतिशतपात्रस्य उपयोगः प्रतिवर्षं समः तिष्ठति। यदि तु नाममात्रेण स्थिरं निर्धारितम्, तर्हि तस्य मूल्यं मुद्रास्फीत्या सह ह्रासते — शुद्धा उपभोगशक्तिः अपि, यां अन्यौ द्वौ विकल्पौ तुलयितव्यौ, तथैव ह्रासते।',
+ 'f.I:rendite.hint': 'लाभात् पूर्वम्, करात् पूर्वं च। त्रिषु अपि विकल्पेषु तदेव ETF — एवमेव संरचनानां तुलना भवति, न करमुक्तानां निर्णयानाम्।',
+ 'f.I:alter.hint': 'बचतेः आरम्भः। वर्षम् 0 = 2026.',
+ 'f.I:rentbeg.hint': 'त्रिषु अपि विकल्पेषु दानस्य आरम्भः। Altersvorsorgedepot प्रथमं 65 वर्षतः दातुं शक्यते (नूतनं निर्धारितम् 2026).',
+ 'f.I:kv_ruhe.hint': 'शक्तिशाली सेवकः। विधिदत्तायाम् आरोग्यसुरक्षायां कर्मजातं दानं Versorgungsbezüge इति उच्यते, तत् सम्पूर्णम् अंशदानदरं वहति (§§ 229, 250 SGB V); वार्धक्यनिधिः तत् न वहति। एका इयं प्रकल्पना मार्गं परिवर्तयति।',
+ 'f.I:auszform.hint': 'मूलधनम्: एकवारं दत्तं सम्पूर्णम् आरोग्यांशदानं 120 मासान् यावत् विभज्यते (§ 229 Abs. 1 S. 3 SGB V). आजीवनवृत्तिः दानं सम्पूर्णं जीवनं यावत् विस्तारयति, एवं च अधिकं धनं तस्यामेव मुक्तौ रक्षति। इदं प्रतिरूपं सर्वं वा किमपि न वा चिनोतुं शक्नोति; अर्धं bAV-मूलधनम् अत्र न प्रतिरूपितम्।',
+ 'f.I:teilkap.hint': 'सञ्चितधनस्य 30 प्रतिशतं यावत् दानारम्भे एकवारदानरूपेण ग्रहीतुं शक्यते — उभयोः विकल्पयोः। व्ययस्य द्वे कारणे: तस्मिन् एव वर्षे सम्पूर्णा वृद्धिः गृह्यते, ततः परं वृद्धिः केवलं करानन्तरधनानुसारेण भवति। वर्षस्य उच्चतमं मूल्यम् („sleeve“) अंशदानरहितं दीयते; एतत् प्रतिरूपस्य प्रथा, न विधिनियमः।',
+ 'f.I:av_auszform.hint': 'यत् एकवारदानानन्तरं शेषधनेन सह भवति — bAV-प्रकल्पनातः पृथक्। दानयोजना: धनं सञ्चीयते, वृद्ध्या सह दीयते च; अदत्तः भागः अर्धान्तरेण करयोग्यः भवति। आजीवनवृत्तिः: मूलधनं नियोक्तुः (निधेः) प्राप्नोति, किन्तु अदत्तः भागः केवलं फलभागेन करयोग्यः (§ 22 Nr. 5 S. 2 Buchst. a EStG, 67 वर्षतः 17 प्रतिशतम्, अत्र 26 प्रतिशतम्). दत्तः भागः उभयोः विकल्पयोः सर्वदा प्रतिदीयते, तत् न परिवर्तते।',
+ 'f.I:agz_fix_min.hint': 'समानानि प्रतिरूपाणि निर्धारितं मूल्यं न्यूनतमेन स्वांशदानेन सह बध्नन्ति। 0 इति बन्धरहितं सूचयति — तदा अनुदानं प्रतिवर्षं कर्मणः चलति, किमपि अंशदानं विना अपि। चिन्तनीयम्: बन्धरहितम् अनुदानं यथार्थं भवेत् चेत्, तत् परिवर्तनबन्धस्य अन्तरं न स्यात्, bAV-विरुद्धं स्थाप्येत, परिवर्तनं विना अपि यदि चलेत्। केवलं तत् एव लेख, यत् यथार्थतया विकल्पेन सम्बद्धम्।',
+ 'f.I:rentfak_av.hint': 'वृत्तिं यत् धनं भवति तस्य अनुपातः। bAV इव निर्धारितः; धनस्य विश्वासः आरोग्यसुरक्षां विना स्यात्, एवं च श्रेयान् स्यात्। 0-स्थाने वृत्तिः नास्ति।',
+ 'f.I:rentdyn_av.hint': 'निधिवृत्तेः विश्वासस्य वृद्ध्या सह वर्धनस्य भागः वा अनुपातः, दानकाले।',
+ 'f.I:rentfak.hint': '„वृत्तिः“ इति दानप्रकारस्य अनुपातः। 26 € मासिकवृत्तिः 10.000 € इत्यनुसारेण 3,1 प्रतिशतं गृहीतम् इति भवति। कर्मस्थानविश्वासस्य ग्रन्थे तिष्ठति।',
+ 'f.I:rentdyn.hint': 'bAV-वृत्तेः विश्वासस्य वृद्ध्या सह वर्धनस्य भागः वा अनुपातः, दानकाले।',
+ 'f.I:fuenftel.hint': '§ 34 EStG § 3 Nr. 63-सन्धिभ्यः निर्धारितमूलधनदाने BFH X R 23/15 इत्यनुसारेण कदाचित् उपयुज्यते। निश्चयेन: न।',
+ 'f.I:planende.hint': 'दानयोजना अत्र यावत् चलति। आजीवनवृत्तिः तयैव सीमया तुल्यते; यत् ततः परं भवति, तत् स्मरणरूपेण „निदाने“ तिष्ठति। यः वृद्धः भवति, सः तत्र लभते।',
+ 'f.I:ausscheid.hint': 'अतः परं न वेतनं, न अंशदानम्। धनं दानारम्भं यावत् वर्धते।',
+ 'f.I:tzalter.hint': 'प्रत्येकं मूल्यं दानारम्भात् गण्यते: न अर्धं कर्म। निर्धारितं 67.',
+ 'f.I:tzfaktor.hint': 'पूर्णकर्मवेतनस्य भागः। 60 प्रतिशतम् = 60-स्थानम्।',
+ 'f.I:gsteig.hint': 'तथा च अंशदानसीमां, Bezugsgröße-नाम, माध्यमवेतनं, करसीमां च पुरतः वहति।',
+ 'f.I:stkl.hint': 'महत्त्वपूर्णः करनिर्धारणप्रकारः, न वेतनस्य करवर्गः: वर्गः प्रतिवर्षं कटौतिं निर्धारयति, वार्षिकी गणना तथापि § 32a Abs. 5 EStG-अनुसारेण विभाजनेन गण्यते। „सम्मिलितम्“ इति चेत्, सहचरस्य करयोग्यमूल्यम् अवश्यं लेखनीयम्।',
+ 'f.I:partner.hint': 'सम्मिलितकरस्य अनुपातः। 2·ESt((zvE + zvE_सहचरस्य)/2) इति गण्यते।',
+ 'f.I:kist.hint': 'बवेरिया-बादेन्-व्युर्टेम्बर्ग्-राज्ययोः 8 प्रतिशतम्, अन्यत्र 9, धर्मसंस्थातः निर्गतानां 0. धर्मस्थानकरः एवं गण्यते: 0,25/(1+0,25k)·(1+0,055+k).',
+ 'f.I:tarifanp.hint': 'सर्वः करः वेतनवृद्ध्या λ = (1+x)^t मितेन गण्यते: ESt = s·λ·T(zvE/s/λ). एवमेव सर्वाः करसीमाः समानं वर्धन्ते। 0 प्रतिशतं सम्पूर्णं शीतलं वर्धनं दर्शयति।',
+ 'f.I:kinder.hint': 'Altersvorsorgedepot-मध्ये सन्तानदानम्: 1 € प्रति € स्वांशदानस्य, 300 € यावत् प्रतिसन्तानम्।',
+ 'f.I:kind_jahre.hint': 'इदं सन्तानदानं सन्तानवेतनस्य अधिकारेण सम्बद्धम् (§ 85 EStG), अतः सर्वं बचत्या न चलति।',
+ 'f.I:kinderlos.hint': '0,6 प्रतिशतम् अनुदानं परिचर्याऽंशदाने, अपत्यरहितानां कृते (§ 55 Abs. 3 SGB XI).',
+ 'f.I:k_bav.hint': 'आरोग्यसुरक्षादरः TER च। यथार्था व्ययाः कर्मस्थानविश्वासग्रन्थे तिष्ठन्ति — तत्र पश्य, अत्र मा निर्णय।',
+ 'f.I:k_av.hint': 'निर्धारिते धने यथार्थाः व्ययाः विधिना 1,0 प्रतिशतं यावत् प्रतिवर्षं निर्धारिताः।',
+ 'f.I:k_priv.hint': 'केवलं TER विश्वव्यापिनः ETF-इत्यस्य।',
+ 'f.I:infl.hint': 'सर्वाणि मूल्यानि „अद्यतनक्रयशक्त्या“ इति ह्रासयति। न्यूनं सत्यतां परिवर्तयति, अधिकां वृद्धिं तु सर्वदा।',
+ 'f.I:sonst_zve.hint': 'प्रथमं राजकीयवृत्तेः करयोग्यो भागः, अत्र प्रविष्टं धनं विहाय। एतत् दानकाले करानुपातसीमां निर्धारयति — तथा च करान्तरं t₀ − t₁.',
+ 'f.I:rente_br.hint': 'आरोग्यसुरक्षायाम् अनुपातः: राजकीया वृत्तिः Versorgungsbezüge च एकाम् अंशदानसीमां विभजतः (§ 223 Abs. 3 SGB V).',
+ 'f.P:bbg_rv.hint': 'SVBezGrV 2026 (BGBl. 2025 I Nr. 116), सर्वस्मिन् राज्ये समाना।',
+ 'f.P:bbg_kv.hint': 'SVBezGrV 2026; 5.812,50 € प्रति मासम्।',
+ 'f.P:bezug.hint': 'SVBezGrV 2026, 47.460 € प्रतिवर्षम्। दशमो भागः आरोग्यसुरक्षायां Versorgungsbezüge-मुक्तिः भवति (§ 226 Abs. 2 S. 2 SGB V).',
+ 'f.P:de_rv.hint': 'SGB VI-इत्यस्य परिशिष्टम् 1, मूल्यम् 2026 — वृत्तिबिन्दोः संख्या।',
+ 'f.P:rw.hint': 'Rentenwertbestimmungsverordnung 2026, 1.7.2026-तः: 42,52 € (+4,24 प्रतिशतम्).',
+ 'f.P:rv_an.hint': '18,6 प्रतिशतम्, अर्धम् अर्धं च।',
+ 'f.P:av_an.hint': '2,6 प्रतिशतम्, अर्धम् अर्धं च।',
+ 'f.P:kv_allg.hint': '§ 241 SGB V.',
+ 'f.P:kv_zus.hint': 'BMG-अनुसारेण ज्ञातम्; प्रत्येका बीमा भिन्ना — तव स्वकीयम् अनुदानं लेख।',
+ 'f.P:pv_ges.hint': '§ 55 SGB XI. अन्यसन्तानतः ह्रासः न प्रतिरूपितः।',
+ 'f.P:pv_an.hint': 'साक्सोनि-राज्ये भिन्नम् (2,3 प्रतिशतम्).',
+ 'f.P:pv_kl.hint': '§ 55 Abs. 3 SGB XI, अपत्यरहितानां कृते।',
+ 'f.P:gfb.hint': '§ 32a Abs. 1 EStG, Steuerfortentwicklungsgesetz-अनुसारेण।',
+ 'f.P:e2.hint': 'करानुपातसीमा 14-तः 23,97 प्रतिशतं यावत् वर्धते।',
+ 'f.P:e3.hint': 'करानुपातसीमा 23,97-तः 42 प्रतिशतं यावत् वर्धते।',
+ 'f.P:e4.hint': '277.826 €-तः 45 प्रतिशतं तुल्यम्।',
+ 'f.P:a2.hint': 'ESt = (a₂·y + b₂)·y, y = (zvE − मूलकरमुक्तिः)/10.000.',
+ 'f.P:a3.hint': 'ESt = (a₃·z + b₃)·z + c₃, z = (zvE − 17.799)/10.000.',
+ 'f.P:c4.hint': 'ESt = 0,42·zvE − c₄.',
+ 'f.P:c5.hint': 'ESt = 0,45·zvE − c₅.',
+ 'f.P:soli.hint': 'SolzG 1995.',
+ 'f.P:soli_fg.hint': '2026, मुक्तम् अंशदानम्, यथार्थस्य ESt-इत्यस्य अनुसारेण; सम्मिलिते द्विगुणम्। तथा मार्दवसीमा।',
+ 'f.P:soli_mz.hint': '§ 3 Abs. 2a SolzG.',
+ 'f.P:an_pausch.hint': '§ 9a S. 1 Nr. 1a EStG.',
+ 'f.P:sa_pausch.hint': '§ 10c EStG.',
+ 'f.P:kapst.hint': '§ 32d Abs. 1 EStG.',
+ 'f.P:tfs.hint': '§ 20 Abs. 1 Nr. 3 सह § 20 InvStG, अंशभागः 50 प्रतिशतात् परम्।',
+ 'f.P:sparerpb.hint': '§ 20 Abs. 9 EStG; सम्मिलिते द्विगुणम्। Vorabpauschale-इत्यस्य अधिकांशं त्यजति — निदानं मूल्यगत्यां पश्य।',
+ 'f.P:basiszins.hint': 'BMF-पत्रम् 13.01.2026-तः, § 18 Abs. 4 InvStG (2025: 2,53 प्रतिशतम्). 0-इति निर्धारितं चेत्: किमपि Vorabpauschale नास्ति।',
+ 'f.P:vp_faktor.hint': '§ 18 Abs. 1 S. 1 InvStG.',
+ 'f.P:st_frei_q.hint': '8 प्रतिशतं BBG-RV = 8.112 € 2026 वर्षे।',
+ 'f.P:sv_frei_q.hint': '§ 1 Abs. 1 S. 1 Nr. 9 SvEV; 4 प्रतिशतं = 4.056 € 2026 वर्षे। सैव § 1a BetrAVG-अधिकारस्य सीमा।',
+ 'f.P:zul_g1.hint': 'Altersvorsorgereformgesetz, मे 2026-तः प्रभावी, 1.1.2027-तः उपयुज्यमाना।',
+ 'f.P:zul_s1.hint': '360 € स्वांशदानं यावत्: 50 प्रतिशतं प्रति €.',
+ 'f.P:zul_g2.hint': '361-तः 1.800 € यावत्: 25 प्रतिशतं प्रति €.',
+ 'f.P:zul_s2.hint': 'स्वांशदानस्य परमं दानम्; परमां मूलमुक्तां दानराशिं 540 € करोति।',
+ 'f.P:kind_zul.hint': '1 € प्रति € स्वांशदानस्य, 300 € यावत् प्रतिसन्तानम्।',
+ 'f.P:av_max.hint': 'BMF-प्रश्नः नूतननिर्धारितस्वपरिचर्याविषये, 05.05.2026. एतत् उच्चतमं मार्गान्तरेण चलति, स्वधनरूपेण गण्यते।',
+ 'f.P:av_sa_max.hint': 'प्रतिरूपस्य प्रकल्पना, विश्वासः 70 प्रतिशतम्। स्वांशदानं 1.800 € यावत्, अनुदानानि च। इदमेव अनुपातं निर्णयति, सन्तानः AV-धनस्य मूल्यं वर्धयति ह्रासयति वा इति।',
+ 'f.P:ertragsq.hint': '§ 22 Nr. 1 S. 3 Buchst. a Doppelbuchst. bb EStG, अदत्तेभ्यः अंशदानभागेभ्यः।',
+ 'f.P:halb.hint': '§ 20 Abs. 1 Nr. 6 S. 2 EStG समानम् (सन्धिः 12 वर्षात् परम्, दानं 62-तः परम्): अर्धम् अन्तरम्। विश्वासः 80 प्रतिशतम्।',
+
+ /* ---------------- सर्वाणि शेषवचनानि ---------------- */
+ 'app.meta': 'औद्योगिकः वार्धक्यनिधिः, Altersvorsorgedepot, वैयक्तिकः ETF-निधिश्च तेनैव शुद्धोपभोगशक्त्या तुल्यन्ते। विधिस्थितिः 2026.',
+ 'hdr.sub': 'औद्योगिकः वार्धक्यनिधिः, Altersvorsorgedepot, वैयक्तिकः ETF-निधिश्च &mdash; <b>तेनैव शुद्धोपभोगशक्त्या</b> तेनैव ETF-इत्यनेन च तुल्यन्ते। विधिस्थितिः 2026.',
+ 'input.sub': 'इयं गणना प्रत्येकपरिवर्तनेन तत्क्षणं नूतना भवति। <span class="qm" style="cursor:default">?</span>-चिह्नेन सह प्रत्येकं क्षेत्रं स्वयं व्याख्यायते।',
+ 'extra.sub': 'सर्वम् एतत् उत्तमां पूर्वस्थितिं धरति। मा स्पृश, यदि न रोचते।',
+ 'calc.sub': 'सर्वेभ्यः येषाम् इच्छा एतं मार्गम् अनुसर्तुम्।',
+ 'share.sub': 'तव विवरणानि केवलम् अस्मिन् अनुप्रयोगे तिष्ठन्ति (<kbd>localStorage</kbd>). किमपि न प्रेष्यते, न कोऽपि सर्वरः न वा गुप्तचरः।',
+ 'footer.1': '<b>न विधिपरामर्शः, न धनपरामर्शः।</b> प्रतिरूपं विश्वासयोग्यं न भवति। 2026-वर्षस्य नूतनस्वपरिचर्याविषये विधिस्थितिः बहुषु स्थानेषु अद्यापि अनिश्चिता; एताः न्यूनतमविश्वासयुक्ताः प्रकल्पनाः „गणनामार्गः → प्रकल्पनानां दृढता“ इत्यत्र तिष्ठन्ति, तत्र परिवर्तयितुं शक्यन्ते च।',
+ 'footer.2': 'गणनाया मूलं केवलं Excel-प्रतिरूपात् <span class="pill">bAV-DYNO_vs_Altersvorsorgedepot_vs_ETF.xlsx</span> निष्कासितम्, त्रिभिः परीक्षाभिः योगस्य सत्यतायै परीक्षितं च (परमं भेदः 1,3·10<sup>&minus;14</sup>).',
+ 'metric.monat.desc': 'सर्वं दानकालं तुल्यं मासिकं दानं तेनैव मूल्येन, अद्यतनक्रयशक्त्या। एकः अनुपातः, यं तव शुद्धधनेन इदानीं तुलयितुं शक्नोषि।',
+ 'metric.ertrag.desc': 'यत् एतत् विकल्पः अद्यतनक्रयशक्त्या तव स्वकर्मणः उपरि करोति: सर्वेषां शुद्धदानानां वर्तमानमूल्यं शुद्धोपभोगशक्तेः वर्तमानमूल्यं विहाय।',
+ 'metric.irr.desc': 'यथार्थतया स्थापितशुद्धधने वृद्धिः, नाममात्रेण। ETF-इत्यस्य निर्धारितया सम्पूर्णवृद्ध्या सह तुल्यते — भेदः तत्र यत् दानम् अंशदानं च सह व्ययन्ते वा दीयन्ते वा।',
+ 'metric.kapital.desc': 'करात् पूर्वम्, अंशदानात् पूर्वं च, नाममात्रेण। निर्णयार्थं न भवति अयम् अनुपातः: bAV अत्र अधिकं पुरतः स्यात्, किन्तु दाने हीयते।',
+ 'ui.couple': '<span>⇅</span> द्वौ तदेव परिमाणं पश्यतः। एकं परिवर्तय, अपरं तत् अनुसरति।',
+ 'ui.legalNote': 'विधिपरिमाणं ग्रन्थस्थानेन सह। एतत् परिवर्तय, यदि विधिः परिवर्तितः, तव बीमा वा भिन्ना।',
+ 'n.beitrag.ueber8': function(p, f){
+ return 'वार्धक्यबीमायाः अंशदानसीमायाः 8 प्रतिशतात् परम् (' + f.eur(p.v8) + ' प्रतिवर्षम्). अयं भागः '
+ + 'न करयोग्यः, न अंशदानयोग्यः — आरोग्यसुरक्षां प्रविशति, तत्र च किमपि केवलम् आरोग्यसुरक्षां '
+ + 'विना न गृह्यते।'; },
+ 'n.beitrag.ueber4': function(p, f){
+ return 'वार्धक्यबीमायाः अंशदानसीमायाः 4 प्रतिशतात् परम् (' + f.eur(p.v4) + ' प्रतिवर्षम्). अत्र यावत् '
+ + '§ 1a BetrAVG-अधिकारः तव अस्ति, ततः परं नियोक्तुः अनुमतिः आवश्यकी।'; },
+ 'n.agzus.gedeckelt': function(p, f){
+ return f.pct(p.quote, 1) + '-पर्यन्तं निर्धारितम्। नियोक्ता यथार्थतया ' + f.eur2(p.ersparnis)
+ + ' प्रतिवर्षं बचति — उच्चतराणि मूल्यानि अत्र किमपि न परिवर्तयन्ति, यावत् „यथार्था बचतिः“ इति प्रकारः तिष्ठति।'; },
+ 'n.agz_fix.fliesstNicht': function(p, f){
+ return 'न चलति: तव मासिकम् अंशदानम् ' + f.eur2(p.beitrag) + ' न्यूनतमसीमायाः '
+ + f.eur2(p.schwelle) + ' अधः वर्तते („अन्यवचनेषु“ पश्य)।'; },
+ 'n.agz_fix.ueber4': function(p, f){
+ return 'निर्धारितम् अनुदानं सर्वं 4-प्रतिशतपात्रात् परम् (' + f.eur(p.topf)
+ + ' प्रतिवर्षम्) ' + f.eur(p.ueber) + ' अतिक्रामति। अयं भागः तव नियोक्तृवेतनं स्यात् — प्रतिरूपम् '
+ + 'एतत् अधिकभारं न गणयति, अतः bAV-इत्यस्य पक्षे अधिकम् अनुकूलं निर्णयति।'; },
+ 'n.agz_fix.verdraengung': function(p, f){
+ return 'प्रथमं 4-प्रतिशतपात्रं पूरयति: तव स्वांशदानात् शेषं भवति ' + f.eur(p.rest)
+ + ' अंशदानरहितम्। तव शुद्धोपभोगशक्तिः तदा वर्धते — अनुदानं तु दत्तं धनम् एव, केवलं तव '
+ + 'स्वकीयां सीमां परिवर्तयति।'; },
+ 'n.agz_fix.ueber8': 'स्वांशदानेन सह मिलित्वा BBG-RV-इत्यस्य 8 प्रतिशतात् परम् — इदम् उच्चतमं न करयोग्यं, न अंशदानयोग्यम्।',
+ 'n.agz_fix_min.knapp': function(p, f){
+ return 'सीमायाः परम् एव ' + f.eur2(p.d) + ' असि। अधः निर्धारितम् अनुदानं सर्वं हीयते: '
+ + 'अन्तिमस्य € इत्यस्य अंशदानस्य वृद्धिः अत्र अनिश्चिता, बन्धः सर्वम् ↔ शुद्धम् तत्र अस्थिरम्।'; },
+ 'n.agz_fix_min.verfehlt': function(p, f){
+ return 'सीमा न प्राप्ता — ' + f.eur2(p.fehlt) + ' अधिकं मासे ' + f.eur2(p.zuschuss)
+ + ' अनुदानम् आनयेत्। एतत् सर्वप्रतिरूपे सर्वदा श्रेष्ठतमं €.'; },
+ 'n.teilkap.kosten': function(p, f){
+ return 'व्ययः ' + (p.gewinn ? 'न किमपि, किन्तु: ' + p.dtxt : p.dtxt + ' ' + p.unit)
+ + ' करसमतायाः अनुपातविरुद्धम्। कारणम्: एकवारदानं एकस्मिन् वर्षे सर्वं करयोग्यं भवति (तत्र '
+ + 'भारसीमा ' + f.pct(p.grenz, 1) + '), ततः परं वृद्धिः केवलं करानुपातेन भवति, न प्रतिरूपस्य फलेन।'; },
+ 'n.av_auszform.horizont': function(p, f){
+ return 'तुलनासीमायाः परम् अंशदानं ' + f.eur(p.rest) + ' अद्यापि प्रवर्तते, यत् अत्र न गण्यते। '
+ + 'निर्धारिता सीमा प्रत्येकाम् आजीवनवृत्तिं सर्वदा ह्रासयति — यः वृद्धः भवति, सः तत्र लभते।'; },
+ 'rank.swap': function(p, f){
+ return '<b>सूचकाङ्काः परस्परं न मिलन्ति।</b> मासिकदानानुसारेण ' + p.a + ' ' + p.b + ' अपेक्षया '
+ + 'अग्रे वर्तते, शुद्धलाभस्य अद्यतनमूल्यानुसारेण तु भिन्नम्। कारणम्: अद्यतनमूल्यं मुद्रास्फीत्या '
+ + '(' + f.pct(p.infl, 2) + ') ह्रासते, मासिकदानं तु करानन्तरपुनर्निवेशवृद्ध्या ('
+ + f.pct(p.wiederanl, 2) + ') सह वर्धते। यावत् एतौ द्वौ भिद्येते, तावत् श्रेयः दत्तं मूलधनं '
+ + 'तिष्ठति। कः सूचकाङ्कः प्रमाणम्, तत् निर्भरति यत् त्वं स्थापयितुम् इच्छसि व्ययितुं वा — '
+ + '„व्ययितुम्“ चेत्, मूल्यं „स्वकीय-ETF-धनस्य उपयोगः“ इत्यत्र स्थापय, यथा पुनर्निवेशवृद्धिः '
+ + 'शून्यं गच्छति।'; },
+ 'warn.unreachable': 'शुद्धोपभोगशक्तिः प्राप्तुं न शक्यते — तव वेतनात् परम्। उच्चतमं सम्भाव्यं मूल्यं निर्धारितम्।',
+ 'warn.inactive': 'प्रथमे वर्षे तव विवरणानुसारेण त्वं कर्मणि न असि — न वेतनपरिवर्तनम्, न शुद्धोपभोगशक्तिः, यया सर्वम् अंशदानं पुनः गणयितुं शक्येत। „कर्मणः निवृत्तिः“ „अद्यतनं वयः“ च पश्य।',
+ 'verdict.lead': function(p){
+ return '<b>' + p.satz + '</b> ' + p.wert + '-इत्यनेन सह अग्रे वर्तते — ' + p.d2 + ' अधिकं ' + p.nom2
+ + (p.nom3 ? ' ' + p.d3 + ' अधिकं ' + p.nom3 + ' च' : '') + '.'; },
+ 'verdict.top': function(p, f){
+ return ' अस्मिन् परिमाणे ' + p.gen + ' वैयक्तिकETF-निधेः अपेक्षया परमं स्थानम् „'
+ + p.label + '“ भवति — ' + (p.pro ? 'लाभाय' : 'हानये') + ' ' + p.gen + ', '
+ + f.eur(p.wert) + ' अद्यतनमूल्येन सह। सर्वं विभाजनं „मूल्यस्य निदानम्“ इत्यत्र तिष्ठति।'; },
+ 'verdict.band': function(p, f){
+ return '<span class="band">कियत् दृढम् एतत्? सर्ववृद्ध्या ' + f.pct(p.lo, 1) + '-तः '
+ + f.pct(p.mid, 1) + '-पर्यन्तं तत् ' + p.vlo + ' स्यात्, ' + f.pct(p.hi, 1) + '-मूल्ये '
+ + p.vhi + ' स्यात् — निदानम् '
+ + (p.stabil ? 'अस्मिन् परिमाणे समानं तिष्ठति।'
+ : '<b>अस्मिन् परिमाणे भिन्नं भवति</b>, निदानम् अत्र न वहति।')
+ + '</span>'; },
+ 'demo.text': '<b>एतानि अद्यापि प्रतिरूपमूल्यानि सन्ति</b> — 40 वर्षाणि, 75.000 € वार्षिकं सकलवेतनम्, 300 € मासिकं वेतनपरिवर्तनम्, विधिदत्ता आरोग्यसुरक्षा। „तव विवरणेषु“ स्वकीयानि लेख; तदा इदं स्मरणं स्वयं गच्छति।',
+ 'sens.readout': 'मितम्: तव अद्यतनमूल्यम्। वृत्ताः: मापनस्थानं स्वकीयेन धनेन सह। अस्मिन् मार्गे चल वा मूल्यानि स्पृश।',
+ 'sens.note': function(p){
+ return 'अन्तिमः स्पृष्टः सीमाकः स्वकीयेन मानेन सर्वं गण्यते — ' + p.n
+ + ' पूर्णानि प्रतिरूपचक्राणि। इदानीम्: „' + p.label + '“। अन्यं सीमाकं स्पृश, मार्गः सह '
+ + 'परिवर्तते।'; },
+ 'sens.noteNetto': function(p, f){
+ return ' पश्य: सीमाकः शुद्धोपभोगशक्तिः च परिवर्तेते (अत्र ' + f.eur2(p.lo) + '-तः '
+ + f.eur2(p.hi) + '-पर्यन्तं मासे) तथा तत् मूल्यं यत् त्रिषु विकल्पेषु स्थाप्यते। तत्र त्रयः '
+ + 'वृत्ताः प्रत्येकस्मिन् x-स्थाने सम्यक् समानाः भवितुं शक्नुवन्ति, उच्चता तु अन्यैः x सह '
+ + 'न। कोणाः अंशदानसीमासु (' + f.eur(p.bbgkv) + ' KV/PV-कृते, ' + f.eur(p.bbgrv)
+ + ' RV/AV-कृते) करसीमासु च तिष्ठन्ति।'; },
+ 'wf.check': function(p, f){
+ return 'परीक्षा: ' + f.eur(p.start) + ' + ' + f.eur(p.summe) + ' = ' + f.eur(p.start + p.summe)
+ + ' (भवितव्यम् आसीत् ' + f.eur(p.ende) + ', भेदः ' + f.nf2(p.start + p.summe - p.ende) + ' €).'; },
+ 'wf.note': 'सर्वं अन्तात् विभक्तम्, तथापि सम्यक् गणितम् — किन्तु <b>न्यायकर्म</b> अस्ति: शक्तयः पृथक् कर्तुं न शक्यन्ते, प्रत्येका शलाका भागं <i>यथोचितम्</i> उपरिस्थैः सह मिनोति। शलाकां स्पृश निदानार्थम्।',
+ 'wfb.vp.note': 'न bAV, न Altersvorsorgedepot Vorabpauschale (§ 18 InvStG) जानाति। स्वधनरूपेण Vorabpauschale विना सह च मितम्। शलाका ह्रासं गच्छेत्: Vorabpauschale बहु बचतिभागं प्रविशति, किन्तु सर्वं व्ययमूलम् उत्थापयति — अतः स्वधनस्य भागः श्रेयान् भवति।',
+ 'wfb.zul.note': 'परधनं नूतनदानप्रतिरूपानुसारेण, कटौतिश्च § 10a EStG-अनुसारेण। उभौ मार्गौ त्यक्त्वा मितम्।',
+ 'wfb.arch.note': 'करान्तरं t₀ − t₁ तथा अन्यत् सर्वम्। शेषं तत् सम्यक् करोति, यथा शृङ्खला सम्यक् चलति।',
+ 'wfb.agz.note': 'परधनम् — bAV-इत्यस्याः एकैव संरचना श्रेयसी, या विधितः न आगच्छति। एतद् अनुदानं त्यक्त्वा मितम्।',
+ 'wfb.tarif.note': 'करानुपातसीमा दाने ग्रहणं विना, अन्यत् च सर्वम्। शेषं तत् सम्यक् करोति, यथा शृङ्खला सम्यक् चलति। करवृद्धिः किमपि न भवति: (1−t)(1+r)ⁿ = (1+r)ⁿ(1−t), गुणनं मूल्यं न परिवर्तयति।',
+ 'wfb.kvpv.note': '§§ 229, 250 SGB V: सम्पूर्णम् अंशदानदरं वृत्तिभोक्ता वहति। „वार्धक्ये स्वस्य आरोग्यम्“ इति प्रकल्पनाविरुद्धं भेदरूपेण मितम्।',
+ 'wfb.ep.note': 'वेतनपरिवर्तनं नियोक्तुः वेतनं ह्रासयति, तथा राजकीयां वृत्तिम् अपि। शुद्धं गणितम्।',
+ 'kap.readout': function(p, f){
+ return 'दानारम्भे बद्धानि: bAV ' + f.eur(p.bavGeb) + ' ' + f.eur(p.bav) + ' -तः'
+ + ' · AV-निधिः ' + f.eur(p.avGeb) + ' ' + f.eur(p.av) + ' -तः'
+ + ' · स्वधनम् ' + f.eur(0) + ' ' + f.eur(p.priv) + ' -तः'
+ + '. समानं मासिकं दानं गृह्यते, यावत् प्रत्येकः विकल्पः शून्यं गच्छति।'; },
+ 'kap.note': function(p, f){
+ return 'धनं प्रतिरूपे तिष्ठति, दानकाले शुद्धपुनर्निवेशितदानैः सह वर्धते ('
+ + f.pct(p.wiederanl, 2) + ' करानन्तरम्), समानेन मासिकदानेन विना, यथार्थतया गृह्यमाणम्। '
+ + 'तेन प्रत्येकः विकल्पः सम्यक् शून्यं गच्छति। यतः ग्रहणं केवलं पुनर्निवेशात् आगच्छति, '
+ + 'प्रतिरूपस्य मूलधनं प्रतिरूपे शिष्यते, तत्र प्रतिरूपफलेन सह करात् पूर्वं वर्धते, वृत्ताः '
+ + 'तथापि समानं न चलन्ति। — इयं निर्धारिता सीमा एव मुक्तोपयोज्यो भागः: bAV दानारम्भं यावत् '
+ + 'सर्वं बद्धम् अस्ति (§ 1b BetrAVG शक्तिम् अनश्वरां ददाति, न मुक्तिम्), '
+ + 'Altersvorsorgedepot-तः 65 वर्षात् पूर्वं ग्रहणं हानिः भवति, मुक्तं तु केवलं वर्षोच्चमूल्यात् '
+ + 'परम्, स्वधनं सर्वदा मुक्तम्। एषैव एका मार्गः, यत्र मूलधनदानं सम्यक् दृश्यते। '
+ + (p.verrentet ? 'यतः त्वं धनं वृत्तिरूपेण गृह्णासि, तत्र मूलधनम् अपि नियोक्तुं गच्छति — '
+ + 'वृत्तः ततः ह्रासते, यद्यपि किमपि न नष्टम्। ' : '')
+ + 'पुनश्च स्पष्टम्: वृत्ताः स्वधनम् एतस्मादेव एकस्मात् मार्गात् दर्शयन्ति, न सर्वं तव स्वधनम्।'; },
+ 'zer.readout': 'सर्वं समानं मासिकं दानम् इव, अद्यतनक्रयशक्त्या। यतः सम्यक् प्रवर्तते, विभाजनानि सम्यक् सह गण्यन्ते।',
+ 'zer.note': function(p, f){
+ return 'कालः त्रिषु अपि विकल्पेषु समः। मूलधनस्य दानं द्वादशसु न विभज्यते, अपि तु '
+ + 'करानन्तरपुनर्निवेशवृद्ध्या (' + f.pct(p.wiederanl, 2) + ' प्रतिवर्षम्) तस्मिन्नेव काले '
+ + 'दीयते। यः इदं धनं स्थापनस्य स्थाने व्ययति, सः न्यूनतरः तिष्ठति।'; },
+ 'det.warn.lead': 'त्वं संस्तुतमार्गात् बहिः तिष्ठसि: ',
+ 'det.warn.aussch': 'उपयोगस्य 100 प्रतिशतात् परं वेतनपरिवर्तनाय अधिकारः नास्ति। ',
+ 'det.warn.ngef': 'अंशदानानां बहुभागः न करयोग्यः, न अंशदानयोग्यः — अयं भागः आरोग्यसुरक्षां प्रविशति, तत्र केवलम् आरोग्यसुरक्षां विना किमपि न गृह्यते। ',
+ 'det.warn.vb': 'Versorgungsbezug मुक्तिं स्पष्टतया अतिक्रामति; सम्पूर्णमुक्तेः रक्षणं 1/मूलधनम् इव ह्रासते। ',
+ 'det.ann.intro': 'इदं निदानं विधिप्रश्नेषु आधृतम्, ये 2026 वर्षे अद्यापि सर्वे न निश्चिताः। कोष्ठकान्तर्गताः गणनाः स्वकीयाः विश्वासाः सन्ति।',
+ 'det.ann.notmodelled': '<b>न प्रतिरूपितम्:</b> पूर्ववार्धक्यवृत्तिह्रासः, आरोग्य-अकर्म-सन्तानवेतनोपरि वेतनपरिवर्तनप्रभावः, पश्चाज्जीविनां परिचर्या, विश्वासाभावः (PSVaG), अन्यनियोक्तृगमनम्, परिचर्यायां सन्तानह्रासः, § 32d Abs. 6 EStG-अनुसारेण शुभपरीक्षा, मृत्यु-मूलमुक्तिः, सीमातीतं दीर्घजीवनम्।',
+ 'det.prinzip': '<p>सर्वाणि<i> अंशदानानि</i> तुलयितुं न न्याय्यं स्यात्: वेतनपरिवर्तनं सकलधनात् आगच्छति, स्वबचतिः तु शुद्धधनात्। अतः <b>शुद्धोपभोगशक्तिः</b> समाना क्रियते:</p>'
+ + '<p style="font-family:var(--mono);font-size:.82rem;background:var(--chip);padding:9px 11px;border-radius:9px">शुद्धोपभोगशक्तिः = सकलम् अंशदानम् − करबचतिः − नियोक्तृभागः</p>'
+ + '<p>तदेव मूल्यं त्रिषु विकल्पेषु स्थाप्यते। शेषं संरचनानां तुलना, न अंशदानस्य उच्चता।</p>'
+ + '<p><b>करवृद्धिः किमपि न भवति:</b> (1−t)·(1+r)ⁿ = (1+r)ⁿ·(1−t). गुणनं परिवर्तयति। चत्वारि निदानानि शिष्यन्ते:</p>'
+ + '<ol style="padding-left:1.2em;margin:.3em 0"><li>करान्तरम् t₀ − t₁</li>'
+ + '<li>परधनम् — नियोक्तुः अनुदानं वा दानानि वा</li>'
+ + '<li>करमुक्ता रक्षा — किमपि Vorabpauschale नास्ति</li>'
+ + '<li>नूतनानि अंशदानानि, यानि एकम् एव विकल्पं स्पृशन्ति — Versorgungsbezüge-उपरि आरोग्य/परिचर्या</li></ol>'
+ + '<p>चतुर्थं कारणं bAV-इत्यस्य महत्तमा हानिः, द्वितीयं तु संरचनायाः श्रेयः। bAV-इत्यस्याः वृद्धिः <b>सम्यक् सर्वदा अंशदानोच्चत्या सह ह्रासते</b>, यतः मुक्तिः सर्वा, रक्षा च 1/K इव ह्रासते — न अन्तः श्रेष्ठतमा।</p>'
+ + '<p>निर्धारितायां शुद्धोपभोगशक्तौ सर्वम् अंशदानं न्याय्यतया पुनः गण्यते: N(B) सर्वदा सम्यक् वर्धते (dN/dB = 1 − अंशदानानुपातसीमा − करानुपातसीमा > 0), किन्तु BBG-RV-इत्यस्य 4 8 च प्रतिशतयोः कोणेषु, अंशदानसीमासु करसीमासु च अन्तः पुनः गणयितुं न शक्यते। 34 अधिकाराः करस्य चतुस्त्रिंशांशात् न्यूनं ददति।</p>',
+ 'det.s.erg': 'त्रयः अपि विकल्पाः बचतौ सम्यक् तदेव मूल्यं शुद्धव्ययात् व्ययन्ते।',
+ 'det.s.mon': 'सर्वे विकल्पाः तेनैव कालेन दीयन्ते, अद्यतनक्रयशक्त्या। यतः सम्यक् प्रवर्तते, सत्यताः सम्यक् सह गण्यन्ते।',
+ 'det.s.diag': 'किमर्थम् एतत् एवम् अस्ति — त्वं च कुत्र संस्तुतमार्गात् बहिः तिष्ठसि।',
+ 'msg.linkCopied': 'सम्बन्धः प्रतिलिखितः। यः एतम् उद्घाटयति, सः सम्यक् एतां गणनां पश्यति — किमपि शक्त्या न गच्छति।',
+ 'msg.linkFailed': 'प्रतिलेखनं न शक्तम्। सम्बन्धः इदानीं ग्रन्थस्थाने तिष्ठति।',
+ 'pwa.offline': '<b>बन्धं विना मुक्तं भवितुं शक्नोति।</b> इदम् अनुप्रयोगम् इदानीं यन्त्रस्य रक्षायां तिष्ठति, स्पर्शं विना च चलति। संस्थापनार्थम्: iPhone-यन्त्रे „वितरणम्“ → „प्रथमपटले“, Android-यन्त्रे इदं चिह्नम् → „अनुप्रयोगं संस्थापय“.',
+ 'pwa.installAsk': '<b>अनुप्रयोगरूपेण संस्थापयामि वा?</b> तदा स्वकीयचिह्नेन सह प्रथमपटले तिष्ठति, स्पर्शं विना च चलति। ',
+ 'pwa.declined': 'साधु — इदम् अनुप्रयोगम् एवमपि चलति, स्पर्शं विना च।',
+ 'pwa.file': '<b>त्वं ग्रन्थम् एव उद्घाटितवान्</b> (<kbd>file://</kbd>). सर्वं गण्यते, सर्वं रक्ष्यते। द्वे कर्मस्थानविश्वासे भिन्ने स्तः: न चिह्नं प्रथमपटले, न रक्षा स्पर्शं विना — एतत् अत्र आवश्यकं नासीत्, ग्रन्थः सर्वदा अस्मिन् एव यन्त्रे तिष्ठति। पूर्णप्रतिरूपविश्वासार्थं, इमां सञ्चिकाम् HTTPS-स्थाने कुत्रचित् स्थापय, ततः च उद्घाटय।'
+};
diff --git a/app/i18n.tr.js b/app/i18n.tr.js
new file mode 100644
index 0000000..c04f77c
--- /dev/null
+++ b/app/i18n.tr.js
@@ -0,0 +1,584 @@
+/* =====================================================================
+ Türkçe sözlük — TAM (459 anahtar).
+ Kanun atıfları bilerek Almanca bırakıldı: birincil kaynak bunlar ve
+ resmî çevirileri yok. „bAV“ = Entgeltumwandlung, brüt ücretten yapılan
+ işyeri emeklilik kesintisi; Türk mevzuatında birebir karşılığı yok.
+ Aynı şekilde „Altersvorsorgedepot“ ve „Versorgungsbezüge“ özel ad
+ olarak kalır.
+ ===================================================================== */
+window.I18N_TR = {
+ 'f.I:gehalt.label': 'Bugünkü yıllık brüt ücret',
+ 'f.I:beitrag.label': 'Aylık bAV katkısı, brüt',
+ 'f.I:netto_ziel.label': 'Aylık net yük',
+ 'f.I:agzus.label': 'İşveren katkısı',
+ 'f.I:agz_fix.label': 'Ek sabit katkı',
+ 'f.I:agz_fix_dyn.label': 'Sabit katkıyı endeksle',
+ 'f.I:agz_fix_dyn.o0': 'nominal, sabit',
+ 'f.I:agz_fix_dyn.o1': 'ücretle birlikte',
+ 'f.I:agzus_sv.label': 'Katkı kipi',
+ 'f.I:agzus_sv.o0': 'tam katkı',
+ 'f.I:agzus_sv.o1': 'yalnız muaf kısım',
+ 'f.I:agzus_sv.o2': 'fiilî tasarruf',
+ 'f.I:dyn.label': 'Katkıyı endeksle',
+ 'f.I:dyn.o1': 'ücretle birlikte',
+ 'f.I:dyn.o0': 'nominal, sabit',
+ 'f.I:rendite.label': 'ETF brüt getirisi y/y',
+ 'f.I:alter.label': 'Bugünkü yaş',
+ 'f.I:alter.unit': 'yıl',
+ 'f.I:rentbeg.label': 'Ödeme başlangıcı',
+ 'f.I:rentbeg.unit': 'yıl',
+ 'f.I:kv_ruhe.label': 'Emeklilikte sağlık sigortası',
+ 'f.I:kv_ruhe.o1': 'kamu',
+ 'f.I:kv_ruhe.o2': 'özel',
+ 'f.I:auszform.label': 'bAV ödemesi',
+ 'f.I:auszform.o1': 'toplu sermaye',
+ 'f.I:auszform.o2': 'ömür boyu aylık',
+ 'f.I:teilkap.label': 'Altersvorsorgedepot: başlangıçta toplu ödeme',
+ 'f.I:av_auszform.label': 'Altersvorsorgedepot: kalanı',
+ 'f.I:av_auszform.o1': 'çekim planı',
+ 'f.I:av_auszform.o2': 'ömür boyu aylık',
+ 'f.I:agz_fix_min.label': 'Sabit katkı için asgari kendi payı',
+ 'f.I:rentfak_av.label': 'Altersvorsorgedepot aylık katsayısı',
+ 'f.I:rentfak_av.unit': '10.000 € başına €',
+ 'f.I:rentdyn_av.label': 'Hesap aylığının artışı y/y',
+ 'f.I:rentfak.label': 'bAV aylık katsayısı',
+ 'f.I:rentfak.unit': '10.000 € başına €',
+ 'f.I:rentdyn.label': 'bAV aylığının artışı y/y',
+ 'f.I:fuenftel.label': 'Beşte bir kuralını sına',
+ 'f.I:fuenftel.o0': 'hayır (ihtiyatlı)',
+ 'f.I:fuenftel.o1': 'evet',
+ 'f.I:planende.label': 'Karşılaştırma ufku, şu yaşa dek',
+ 'f.I:planende.unit': 'yıl',
+ 'f.I:ausscheid.label': 'İşten ayrılma',
+ 'f.I:ausscheid.unit': 'yıl',
+ 'f.I:tzalter.label': 'Şu yaştan itibaren yarı zamanlı',
+ 'f.I:tzalter.unit': 'yıl',
+ 'f.I:tzfaktor.label': 'Yarı zaman katsayısı',
+ 'f.I:gsteig.label': 'Ücret artışı y/y',
+ 'f.I:stkl.label': 'Beyan biçimi',
+ 'f.I:stkl.o1': 'ayrı',
+ 'f.I:stkl.o3': 'birlikte (bölüşme)',
+ 'f.I:partner.label': 'eşin vergiye tabi geliri',
+ 'f.I:kist.label': 'Kilise vergisi oranı',
+ 'f.I:tarifanp.label': 'Tarife eşiklerinin uyarlanması y/y',
+ 'f.I:kinder.label': 'Çocuk sayısı',
+ 'f.I:kind_jahre.label': 'Çocuk primi alınan yıllar',
+ 'f.I:kind_jahre.unit': 'yıl',
+ 'f.I:kinderlos.label': 'Çocuksuz (bakım sigortası ek payı)',
+ 'f.I:kinderlos.o0': 'hayır',
+ 'f.I:kinderlos.o1': 'evet',
+ 'f.I:k_bav.label': 'bAV ürün maliyeti y/y',
+ 'f.I:k_av.label': 'Altersvorsorgedepot maliyeti y/y',
+ 'f.I:k_priv.label': 'Özel ETF hesabı maliyeti y/y',
+ 'f.I:infl.label': 'Enflasyon y/y',
+ 'f.I:sonst_zve.label': 'emeklilikte diğer vergiye tabi gelir',
+ 'f.I:rente_br.label': 'kamu brüt emekli aylığı y/y',
+ 'f.P:bbg_rv.label': 'Emeklilik sigortası prim tavanı (yıllık)',
+ 'f.P:bbg_kv.label': 'Sağlık/bakım sigortası prim tavanı',
+ 'f.P:bezug.label': 'Bezugsgröße (aylık)',
+ 'f.P:de_rv.label': 'Ortalama ücret (RV)',
+ 'f.P:rw.label': 'Güncel aylık puan değeri',
+ 'f.P:rw.unit': '€',
+ 'f.P:rv_an.label': 'Emeklilik primi, çalışan payı',
+ 'f.P:av_an.label': 'İşsizlik primi, çalışan payı',
+ 'f.P:kv_allg.label': 'Sağlık sigortası genel prim oranı',
+ 'f.P:kv_zus.label': 'Sağlık sigortası ortalama ek primi',
+ 'f.P:pv_ges.label': 'Bakım sigortası toplam prim oranı',
+ 'f.P:pv_an.label': 'Bakım sigortası, çalışan payı',
+ 'f.P:pv_kl.label': 'Bakım sigortası, çocuksuzluk ek payı',
+ 'f.P:gfb.label': 'Asgari geçim indirimi (1. dilim sonu)',
+ 'f.P:e2.label': '2. dilim sonu',
+ 'f.P:e3.label': '3. dilim sonu',
+ 'f.P:e4.label': '5. dilimin başı (en üst oran)',
+ 'f.P:a2.label': 'Katsayı a₂',
+ 'f.P:b2.label': 'Katsayı b₂',
+ 'f.P:a3.label': 'Katsayı a₃',
+ 'f.P:b3.label': 'Katsayı b₃',
+ 'f.P:c3.label': 'Sabit c₃',
+ 'f.P:c4.label': 'Sabit c₄',
+ 'f.P:c5.label': 'Sabit c₅',
+ 'f.P:soli.label': 'Dayanışma payı',
+ 'f.P:soli_fg.label': 'Dayanışma payı muafiyet sınırı',
+ 'f.P:soli_mz.label': 'Yumuşatma bölgesi marjinal yükü',
+ 'f.P:an_pausch.label': 'Çalışan götürü indirimi',
+ 'f.P:sa_pausch.label': 'Özel gider götürü indirimi',
+ 'f.P:kapst.label': 'Stopaj vergisi oranı',
+ 'f.P:tfs.label': 'Hisse fonlarında kısmî istisna',
+ 'f.P:sparerpb.label': 'Tasarruf götürü istisnası',
+ 'f.P:basiszins.label': 'Vorabpauschale taban faizi',
+ 'f.P:vp_faktor.label': 'Taban getiri katsayısı',
+ 'f.P:st_frei_q.label': 'vergiden muaf § 3 Nr. 63 (BBG-RV payı)',
+ 'f.P:sv_frei_q.label': 'primden muaf (BBG-RV payı)',
+ 'f.P:zul_g1.label': 'Prim, 1. kademe (kendi payının € başına)',
+ 'f.P:zul_s1.label': '1. kademe sınırı',
+ 'f.P:zul_g2.label': 'Prim, 2. kademe (kendi payının € başına)',
+ 'f.P:zul_s2.label': '2. kademe sınırı',
+ 'f.P:kind_zul.label': 'Çocuk başına prim',
+ 'f.P:av_max.label': 'Yıllık azami yatırım',
+ 'f.P:av_sa_max.label': '§ 10a azami indirim tutarı',
+ 'f.P:ertragsq.label': 'Getiri payı (67 yaş)',
+ 'f.P:halb.label': 'fark tutarının vergiye tabi kısmı',
+
+ /* ---------------- Çerçeve, pencere başlıkları ---------------- */
+ 'app.title': 'Emeklilik karşılaştırması',
+ 'hdr.title': 'Emeklilik&#8209;karşılaştırması',
+ 'win.header': 'Emeklilik karşılaştırması',
+ 'win.result': 'Sonuç',
+ 'win.input': 'Bilgileriniz',
+ 'win.chart': 'Grafikler',
+ 'win.extra': 'Ek bilgiler',
+ 'win.calc': 'Hesap yolu',
+ 'win.share': 'Kaydet ve paylaş',
+ 'win.min': 'Küçült',
+ 'win.restore': 'Geri yükle',
+ 'win.n': function(p){ return p.n + '. pencere'; },
+ 'ui.share': 'Rakamlarımla bağlantıyı kopyala',
+ 'ui.export': 'Dosya olarak kaydet',
+ 'ui.import': 'Dosya yükle',
+ 'ui.reset': 'Her şeyi sıfırla',
+ 'ui.pin.set': 'Referans olarak sakla',
+ 'ui.pin.clear': 'Referansı bırak',
+ 'ui.lang': 'Dil',
+ 'ui.lang.aria': 'Dil seç',
+ 'ui.lang.partial': 'yalnızca kısmen çevrildi',
+ 'ui.lang.partialNote': 'Bu dil <b>kısmen çevrilmiştir</b>: arayüz, alan adları, tablo başlıkları ve grafik açıklamaları hazır. Uzun hukuki açıklamalar — alanlardaki <span class="qm" style="cursor:default">?</span> metinleri, sonuç yorumu ve hesap yolu — Almanca görünür. Kanun atıfları (BetrAVG, EStG, SGB V) zaten her dilde Almancadır: resmî olarak başka türlü yoklar.',
+ 'sb.up': 'Sonuca dön',
+
+ /* ---------------- Üç seçenek ---------------- */
+ 'opt.bav.name': 'bAV (ücret dönüşümü)',
+ 'opt.bav.short': 'bAV',
+ 'opt.bav.nom': 'işyeri emekliliği',
+ 'opt.bav.satz': 'İşyeri emekliliği',
+ 'opt.bav.gen': 'bAV’nin',
+ 'opt.av.name': 'Altersvorsorgedepot',
+ 'opt.av.short': 'AV hesabı',
+ 'opt.av.nom': 'Altersvorsorgedepot',
+ 'opt.av.satz': 'Altersvorsorgedepot',
+ 'opt.av.gen': 'Altersvorsorgedepot’un',
+ 'opt.priv.name': 'özel ETF hesabı',
+ 'opt.priv.short': 'özel',
+ 'opt.priv.nom': 'özel ETF hesabı',
+ 'opt.priv.satz': 'Özel ETF hesabı',
+ 'opt.priv.gen': 'özel ETF hesabının',
+
+ /* ---------------- Göstergeler ---------------- */
+ 'metric.monat.label': 'Aylık edim',
+ 'metric.monat.unit': '€/ay',
+ 'metric.ertrag.label': 'Net kazanç (bugünkü değer)',
+ 'metric.ertrag.unit': '€',
+ 'metric.irr.label': 'İç verim oranı',
+ 'metric.irr.unit': '% y/y',
+ 'metric.kapital.label': 'Emeklilik başındaki sermaye',
+ 'metric.kapital.unit': '€',
+ 'metric.pa': ' y/y',
+ 'metric.pp': ' puan',
+ 'metric.short.monat': 'Ay',
+ 'metric.short.ertrag': 'Kazanç',
+ 'metric.short.irr': 'İVO',
+ 'metric.short.kapital': 'Sermaye',
+
+ /* ---------------- Giriş alanları, çerçeve ---------------- */
+ 'unit.pct': '%',
+ 'unit.eur': '€',
+ 'unit.eurm': '€/ay',
+ 'ui.hintFor': function(p){ return 'Açıklama: ' + p.label; },
+ 'ui.cnt.legal': function(p){ return p.n + ' hesap büyüklüğü'; },
+ 'ui.cnt.fields': function(p){ return p.n + ' alan'; },
+ 'group.bav': 'İşveren katkısı ve ödeme biçimleri ayrıntılı',
+ 'group.person': 'Zaman ekseni, ayrılma, yarı zaman',
+ 'group.steuer': 'Vergi, beyan, çocuklar',
+ 'group.markt': 'Maliyetler ve enflasyon',
+ 'group.ruhe': 'Emeklilik',
+ 'group.p_sv': 'Hesap büyüklükleri: sosyal sigorta 2026',
+ 'group.p_est': 'Hesap büyüklükleri: gelir vergisi tarifesi 2026 (§ 32a EStG)',
+ 'group.p_kap': 'Hesap büyüklükleri: menkul kıymet ve fon vergisi',
+ 'group.p_bav': 'Hesap büyüklükleri: işyeri ve teşvikli özel emeklilik',
+
+ /* ---------------- Sonuç kartları ---------------- */
+ 'card.lead': 'önde',
+ 'card.unchanged': 'değişmedi',
+ 'base.pinned': 'Saklanan duruma göre Δ',
+ 'base.delta': function(p){ return 'Δ ' + p.desc; },
+ 'base.none': 'Bir sürgüyü oynatın — değişim burada Δ olarak görünür.',
+ 'base.desc.prev': 'önceki durum',
+ 'base.desc.pinned': 'saklanan durum',
+ 'base.desc.change': function(p){ return '„' + p.label + '“ değişmeden önce'; },
+ 'verdict.pp': function(p){ return p.v + ' yüzde puanı'; },
+
+ /* ---------------- Kayan şerit ---------------- */
+ 'sb.cap': function(p){ return p.label + ' · ' + p.unit + (p.kaufkraft ? ', bugünkü alım gücüyle' : ''); },
+ 'sb.aria': function(p){ return 'Sonuç: ' + p.label; },
+
+ /* ---------------- Grafikler ---------------- */
+ 'tab.sens': 'Duyarlılık',
+ 'tab.wf': 'Değer etkenleri',
+ 'tab.kap': 'Sermaye seyri',
+ 'tab.zer': 'Aylık ayrıştırma',
+ 'chart.error': function(p){ return 'Grafik gösterilemiyor: ' + p.msg; },
+ 'sens.legendY': function(p){ return 'y: ' + p.label + ' (' + p.unit + ')'; },
+ 'wf.up': 'kazancı artırır',
+ 'wf.down': 'kazancı azaltır',
+ 'wf.legend': 'Net kazancın bugünkü değeri, bugünkü alım gücüyle',
+ 'wf.barinfo': function(p){ return p.label + ': ' + p.note; },
+ 'wfb.vp.label': 'Vorabpauschale’nin düşmesi',
+ 'wfb.zul.label': 'Primler ve özel gider indirimi',
+ 'wfb.arch.label': 'Vergilendirme mimarisi (kalan)',
+ 'wfb.agz.label': 'İşveren katkısı',
+ 'wfb.tarif.label': 'Tarife arbitrajı ve kalan',
+ 'wfb.kvpv.label': 'Versorgungsbezüge üzerinden sağlık/bakım primi',
+ 'wfb.ep.label': 'Emeklilik puanı kaybı',
+ 'kap.rentbeg': 'Emeklilik başlangıcı',
+ 'kap.swap': 'Sermaye → aylık hakkı',
+ 'kap.legend': 'düz çizgi: toplam &nbsp;·&nbsp; kesik çizgi: serbestçe kullanılabilir',
+ 'zer.netto': 'net',
+ 'zer.tax': 'vergi',
+ 'zer.kv': 'sağlık/bakım',
+ 'zer.pension': 'aylık',
+ 'zer.legend': '<span><i style="background:#808080"></i>vergi</span><span><i style="background:#800000"></i>sağlık/bakım</span><span><i style="background:#800080"></i>yitirilen kamu aylığı</span><span style="margin-left:auto">renkli taban = geriye kalan</span>',
+
+ /* ---------------- Hesap yolu ---------------- */
+ 'det.h.bav': 'bAV',
+ 'det.h.av': 'AV hesabı',
+ 'det.h.priv': 'özel',
+ 'det.h.kennzahl': 'Gösterge',
+ 'det.h.wert': 'Değer',
+ 'det.erg.netto': 'Netten yatırılan toplam (nominal)',
+ 'det.erg.fremd': 'Dışarıdan gelen para (katkı ya da primler)',
+ 'det.erg.kapital': 'Ödeme başındaki sermaye',
+ 'det.erg.brutto': 'Brüt ödemeler toplamı',
+ 'det.erg.steuer': 'bunun gelir/stopaj vergisi',
+ 'det.erg.kvpv': 'bunun sağlık ve bakım sigortası',
+ 'det.erg.rentenverlust': 'Kamu emekli aylığı kaybı (birikimli)',
+ 'det.erg.nettoausz': 'Net ödemeler toplamı (nominal)',
+ 'det.erg.bwausz': 'Net ödemelerin bugünkü değeri',
+ 'det.erg.bwaufw': 'Net yükün bugünkü değeri',
+ 'det.erg.ertrag': 'Net kazancın bugünkü değeri',
+ 'det.erg.verhaeltnis': 'Kazancın yüke oranı',
+ 'det.erg.irr': 'İç verim oranı (nominal)',
+ 'det.erg.vorsprung': 'Özel hesaba karşı üstünlük',
+ 'det.mon.brutto': 'Aylık brüt edim',
+ 'det.mon.steuer': 'eksi gelir/stopaj vergisi',
+ 'det.mon.kvpv': 'eksi sağlık ve bakım sigortası',
+ 'det.mon.ep': 'eksi kamu emekli aylığı kaybı',
+ 'det.mon.netto': 'AYLIK NET (bugünkü alım gücüyle)',
+ 'det.diag.beitrag': 'Aylık brüt bAV katkısı',
+ 'det.diag.aufwand': 'Aylık net yük (ilk yıl)',
+ 'det.diag.grenzsteuer': 'Birikim evresinde marjinal vergi oranı (ilk yıl)',
+ 'det.diag.ersparnis': 'Toplam tasarruf oranı (vergi + prim), ilk yıl',
+ 'det.diag.svAG': 'işverenin fiilî prim tasarrufu',
+ 'det.diag.svAN': 'çalışanın fiilî prim tasarrufu',
+ 'det.diag.ngef': 'Teşviksiz bAV katkılarının payı (ilk yıl)',
+ 'det.diag.aussch': 'Yasal hakkın kullanımı (BBG-RV’nin % 4’ü)',
+ 'det.diag.agzVar': 'bunun işveren katkısı: yüzde olarak (ilk yıl)',
+ 'det.diag.agzFix': 'bunun işveren katkısı: sabit tutar (ilk yıl)',
+ 'det.diag.agzFixUeber4': '% 4 kabını aşan sabit katkı (prim yükü olarak sayılmadı)',
+ 'det.diag.vbMonat': 'Ödeme başındaki aylık Versorgungsbezug',
+ 'det.diag.freibetrag': 'Aynı yılda Versorgungsbezüge istisnası',
+ 'det.diag.vbQuote': 'Versorgungsbezug / istisna oranı',
+ 'det.diag.kapFreiKapital': 'primsiz mümkün sermaye (toplu ödeme)',
+ 'det.diag.kapFreiRente': 'primsiz mümkün sermaye (ömür boyu aylık)',
+ 'det.diag.memoRest': 'NOT: ufuktan sonraki bAV aylık ödemeleri',
+ 'det.diag.memoRestAv': 'NOT: ufuktan sonraki hesap aylığı',
+ 'det.diag.wiederanl': 'Vergi sonrası yeniden yatırım faizi',
+ 'det.diag.kapstEff': 'dayanışma payı ve kilise vergisi dahil efektif stopaj',
+ 'det.diag.bestAnteil': 'Kamu emekli aylığının vergiye tabi payı',
+ 'det.anspar.h.jahr': 'Yıl',
+ 'det.anspar.h.brutto': 'Brüt',
+ 'det.anspar.h.beitrag': 'bAV katkısı',
+ 'det.anspar.h.agzVar': 'İşv. katk. %',
+ 'det.anspar.h.agzFix': 'İşv. sabit',
+ 'det.anspar.h.sv': 'Prim tas.',
+ 'det.anspar.h.st': 'Vergi tas.',
+ 'det.anspar.h.netto': 'Net yük',
+ 'det.anspar.h.zul': 'Primler',
+ 'det.anspar.h.kbav': 'Sermaye bAV',
+ 'det.anspar.h.kav': 'Sermaye AV',
+ 'det.anspar.h.kpriv': 'Sermaye özel',
+ 'det.row.year': function(p){ return p.jahr + ' (' + p.alter + ' yaş)'; },
+ 'det.ausz.h.jahr': 'Yıl',
+ 'det.ausz.h.bavBr': 'bAV brüt',
+ 'det.ausz.h.kvpv': 'sağlık/bakım',
+ 'det.ausz.h.steuer': 'Vergi',
+ 'det.ausz.h.mind': 'Aylık azalması',
+ 'det.ausz.h.bavNet': 'bAV net',
+ 'det.ausz.h.avBr': 'AV brüt',
+ 'det.ausz.h.avNet': 'AV net',
+ 'det.ausz.h.privBr': 'özel brüt',
+ 'det.ausz.h.privNet': 'özel net',
+ 'det.ann.h.annahme': 'Varsayım',
+ 'det.ann.h.vertrauen': 'Güven',
+ 'det.ann.h.anmerkung': 'Not',
+ 'det.ann.r1.a': 'Sosyal sigorta hesap büyüklükleri 2026, § 32a tarifesi 2026',
+ 'det.ann.r1.c': 'SVBezGrV 2026, Steuerfortentwicklungsgesetz',
+ 'det.ann.r2.a': 'Versorgungsbezüge üzerinden sağlık/bakım primi yükümlülüğü',
+ 'det.ann.r2.c': '§§ 229, 250 SGB V',
+ 'det.ann.r3.a': 'İstisna § 226 Abs. 2 S. 2 SGB V (sağlık)',
+ 'det.ann.r3.c': 'tartışmasız',
+ 'det.ann.r4.a': 'Bakım sigortasında istisna yerine eşik',
+ 'det.ann.r4.c': 'rehber metinlerdeki en sık hata kaynağı',
+ 'det.ann.r5.a': 'AV hesabı ödemesinin primden muaflığı',
+ 'det.ann.r5.c': 'Versorgungsbezüge değil',
+ 'det.ann.r6.a': 'Teşviksiz katmanlar için fark tutarının yarısı',
+ 'det.ann.r6.c': '§ 22 Nr. 5 S. 2 Buchst. b i.V.m. § 20 Abs. 1 Nr. 6 S. 2 EStG',
+ 'det.ann.r7.a': 'Katkı yalnız işverenin fiilî tasarrufu kadar',
+ 'det.ann.r7.c': 'karşı görüş % 15’i salt götürü olarak okuyor',
+ 'det.ann.r8.a': 'Özel gider azami tutarı 2.340 €',
+ 'det.ann.r8.c': 'MODEL VARSAYIMI. Bir çocuğun AV hesabının değerini yükseltip yükseltmediğini belirler',
+ 'det.ann.r9.a': 'Emeklilikte KVdR zorunlu sigortası varsayıldı',
+ 'det.ann.r9.c': 'isteğe bağlı sigortalılar incelenmedi',
+ 'det.t.prinzip': 'Karşılaştırma ilkesi',
+ 'det.t.erg': 'Sonuç, ayrıntılı',
+ 'det.t.mon': 'Aylık edim, ayrıştırılmış',
+ 'det.t.diag': 'Tanı',
+ 'det.t.anspar': 'Birikim evresi, yıl yıl',
+ 'det.t.ausz': 'Ödeme evresi, yıl yıl',
+ 'det.t.ann': 'Varsayımların dayanıklılığı',
+
+ /* ---------------- Kaydet ve paylaş ---------------- */
+ 'msg.loaded': 'Yüklendi.',
+ 'msg.loadError': function(p){ return 'Dosya okunamadı: ' + p.msg; },
+ 'msg.reset': 'Temel duruma sıfırlandı.',
+
+ /* ---------------- PWA ---------------- */
+ 'pwa.installBtn': 'Kur',
+ 'pwa.installed': '<b>Kuruldu.</b> Uygulamayı artık diğer uygulamalarınız arasında bulacaksınız.',
+
+ /* ---------------- Alanlardaki açıklamalar (?) ---------------- */
+ 'f.I:gehalt.hint': 'Tek seferlik ödemeler hariç, gerekirse 13. maaşın orantılı payı dahil. Marjinal vergi oranınızı ve prim tavanlarının üstünde olup olmadığınızı belirler.',
+ 'f.I:beitrag.hint': '§ 1a BetrAVG uyarınca brüt ücret dönüşümü. Yasal hak yalnız RV prim tavanının % 4’üne kadar vardır; üzerinde işverenin onayı gerekir.',
+ 'f.I:netto_ziel.hint': 'İlk yılda kullanılabilir gelirinizin azaldığı tutar — fiilen vazgeçilen tüketim, dolayısıyla ekonomik açıdan doğru karar değişkeni. Tam bu tutar üç seçenekte de yatırılır; adil bir karşılaştırmanın koşulu budur. Üstündeki brüt katkıya bire bir bağlıdır: N(B) = B − sosyal sigorta tasarrufu − vergi tasarrufu kesin artandır, dolayısıyla tersine çevrilebilir. Prim tavanlarındaki ve tarife eşiklerindeki kırılmalar yüzünden kapalı biçimde çözülemez, bu yüzden 34 ikiye bölme — bir sentin onda birinden daha hassas.',
+ 'f.I:agzus.hint': 'Yasal asgari % 15 (§ 1a Abs. 1a BetrAVG); birçok işveren daha fazla öder. Özel hesaba karşı başabaş noktası kabaca (1+z)·(1−0,211) ≈ 1 olduğu yerde, yani z ≈ % 26,7 — duyarlılık eğrisiyle sınanabilir. „Fiilî tasarruf“ katkı kipinde bu değere çoğu zaman hiç ulaşılamaz, çünkü katkı önceden doygunluğa ulaşır.',
+ 'f.I:agz_fix.hint': 'Toplu sözleşme veya işletme anlaşmasından gelen, tutardan bağımsız sabit katkı — Deutsche Bahn’da ve birçok toplu sözleşmede yaygın, orada § 1a Abs. 1a BetrAVG uyarınca % 15’e ek olarak. § 3 Nr. 63 EStG uyarınca işveren finansmanlı bir bağıştır ve % 8 kabını ve % 4 primden muafiyeti (§ 1 Abs. 1 S. 1 Nr. 9 SvEV) ÖNCELİKLİ olarak doldurur: kendi dönüşümünüz bu ölçüde dışlanır ve pahalılaşır. İktisadi açıdan bir kaldıraç değil bir tabandır: bir sonraki katkı avronuzun marjinal getirisini değiştirmez (∂²kazanç/∂agz_fix∂katkı ≤ 0, dışlama yoluyla onu düşürebilir bile), ortalamayı ise güçlü biçimde yükseltir. Duyarlılık eğrisinde bu yüzden yaklaşık afindir — % 4 ya da % 8 kabı tükenene kadar, sonra eğri kırılır.',
+ 'f.I:agz_fix_dyn.hint': 'Sabit tutarlar çoğunlukla toplu sözleşmede nominal olarak durur ve yalnız toplu sözleşme dönemlerinde artırılır — öntanım bu yüzden „nominal, sabit“. % 2 enflasyonla 27 yıl sonra bundan 1,02⁻²⁷ ≈ 0,59 faktörü kalır; bunu fazla kötümser bulan „ücretle birlikte“ seçeneğine geçer ve gsteig − infl büyüme oranıyla reel bir katkı elde eder.',
+ 'f.I:agzus_sv.hint': '„Fiilî tasarruf“ kanun metnidir: § 1a Abs. 1a BetrAVG katkıyı yalnız işveren GERÇEKTEN sosyal sigorta primi tasarruf ettiği KADAR borçludur. Ücretiniz her iki prim tavanının da üstündeyse işveren hiçbir şey tasarruf etmez ve hiçbir şey borçlu olmaz. Bu yüzden sürgü temel durumda yaklaşık % 21’de doygunluğa ulaşır. „Tam katkı“ gönüllü ya da toplu sözleşmeye dayalı bir taahhüttür, „yalnız muaf kısım“ ise yaygın götürü uygulamadır. Fiilî-tasarruf yorumunun güven düzeyi yakl. % 75.',
+ 'f.I:dyn.hint': 'Katkı ücret artışıyla birlikte yükselirse, % 8 kabının kullanımı yıllar içinde yaklaşık sabit kalır. Nominal sabit kalırsa, reel değeri enflasyonla düşer — ve karşılaştırma için diğer iki seçeneğin aldığı net yük de onunla birlikte düşer.',
+ 'f.I:rendite.hint': 'Maliyetlerden ve vergilerden önce. Üç seçenekte de aynı ETF — ancak böyle yatırım kararları değil teşvik mimarileri karşılaştırılır.',
+ 'f.I:alter.hint': 'Birikim evresinin başlangıç noktası. Takvim yılı 0 = 2026.',
+ 'f.I:rentbeg.hint': 'Üç seçeneğin de ödeme evresinin başlangıcı. Altersvorsorgedepot en erken 65 yaşından itibaren ödenebilir (2026 reformu).',
+ 'f.I:kv_ruhe.hint': 'Belirleyici kaldıraç. Kamu sağlık sigortasında işyeri emekli aylıkları Versorgungsbezüge sayılır ve tam prim oranını taşır (§§ 229, 250 SGB V); özel emeklilik birikimi taşımaz. Yalnızca bu ayar sonucu tersine çevirir.',
+ 'f.I:auszform.hint': 'Toplu sermaye: geldiği yıl tam vergiye tabidir, sağlık sigortası primleri 120 aya yayılır (§ 229 Abs. 1 S. 3 SGB V). Aylık, ödemeyi kalan yaşam süresine yayar ve bu yüzden aynı istisna altında kat kat daha fazla sermayeyi korur. Model yalnız tümüyle ya da hiç bilir; bAV’nin kısmî sermaye ödemesi modellenmemiştir.',
+ 'f.I:teilkap.hint': 'Ödeme evresinin başında biriken sermayenin % 30’una kadarı toplu ödeme olarak mümkündür — her iki ödeme biçiminde de. İki nedenden dolayı maliyetlidir: geldiği yıl tam artan oranlı vergilendirme ve sonrasında yalnızca stopaj vergisi sonrası faiz oranı. Yıllık azami tutarı aşan fazlalık („sleeve“) toplu ödeme yapılmadan aylığa bağlanır; bu bir model kuralıdır, yasa hükmü değildir.',
+ 'f.I:av_auszform.hint': 'Toplu ödeme dışındaki sermayeye ne olacağı — bunun üzerindeki bAV kararından bağımsız olarak. Çekim planı: para yatırımda kalır ve faiziyle çekilir; teşviksiz katman fark tutarının yarısıyla vergilendirilir. Ömür boyu aylık: sermaye sağlayıcıya geçer, buna karşılık teşviksiz katman yalnız getiri payıyla vergilendirilir (§ 22 Nr. 5 S. 2 Buchst. a EStG, 67 yaşından itibaren burada yaklaşık % 26 yerine % 17). Teşvikli katman her iki durumda da tam olarak erteli vergiye tabidir, bu değişmez.',
+ 'f.I:agz_fix_min.hint': 'Eşleştirme modelleri sabit tutarı asgari bir kendi katkısına bağlar („en az X dönüştüren Y alır“). 0, koşulsuz demektir — o zaman katkı, katkı sıfır olsa bile her aktif yılda akar. Model anlamına dikkat: gerçekten koşulsuz bir katkı, dönüşüm kararının bir fark etkisi olmazdı ve dönüşüm olmasa da akacağı halde karşılaştırmada bAV lehine yazılırdı. Yalnız katılıma gerçekten bağlı olanı girin.',
+ 'f.I:rentfak_av.hint': 'Yalnız hesabın aylığa bağlanması durumunda. bAV’dekiyle aynı öntanımlıdır; bir hesap sözleşmesi sigorta kılıfı gerektirmez ve bu yüzden daha uygun olabilir — somut tekliften gelen değeri girin. 0’da aylık yoktur.',
+ 'f.I:rentdyn_av.hint': 'Hesap sözleşmesinin aylık evresinde kâr payı ya da fon gelişimi.',
+ 'f.I:rentfak.hint': '„Aylık“ ödeme biçiminde geçerli. 10.000 € başına 26 € aylık, yaklaşık % 3,1 çekim oranına karşılık gelir. Ürün bilgi formunda yer alır.',
+ 'f.I:rentdyn.hint': 'Aylık evresinde kâr payı ya da fon gelişimi.',
+ 'f.I:fuenftel.hint': '§ 34 EStG, § 3 Nr. 63 sözleşmelerinden planlı toplu ödemede BFH X R 23/15 kararı uyarınca yalnız istisnai olarak uygulanır. İhtiyatlı yaklaşım: hayır.',
+ 'f.I:planende.hint': 'Çekim planları buraya kadar sürer. Ömür boyu aylıklar aynı ufuk üzerinden karşılaştırılır; bundan sonra akan „Tanı“ altında bir not olarak durur. Uzun yaşayan orada kazanır.',
+ 'f.I:ausscheid.hint': 'Bu noktadan sonra artık ücret ve katkı yoktur. Sermaye ödeme başlangıcına kadar faiz getirmeye devam eder.',
+ 'f.I:tzalter.hint': 'Ödeme başlangıcından itibaren her değer şu anlama gelir: yarı zamanlı çalışma yok. Öntanım bu yüzden 67.',
+ 'f.I:tzfaktor.hint': 'Tam zamanlı ücretin payı. % 60 = % 60’lık kadro.',
+ 'f.I:gsteig.hint': 'Prim tavanlarını, Bezugsgröße’yi, ortalama ücreti ve aylık puan değerini de ileri taşır.',
+ 'f.I:stkl.hint': 'Belirleyici olan VERGİLENDİRME TÜRÜ’dür, ücret vergisi sınıfı değil: sınıf yalnız yıl içi kesintiyi düzenler, yıllık tahakkuk zaten § 32a Abs. 5 EStG uyarınca bölüşmeyle hesaplanır. „Birlikte“ seçeneğinde eşin vergiye tabi gelirini mutlaka girin.',
+ 'f.I:partner.hint': 'Yalnız birlikte beyanda. Hesaplanan: 2·ESt((zvE + zvE_eş)/2).',
+ 'f.I:kist.hint': 'Bavyera ve Baden-Württemberg’de % 8, diğer yerlerde % 9, kiliseden ayrılmada 0. Stopaj vergisini de etkiler: 0,25/(1+0,25k)·(1+0,055+k).',
+ 'f.I:tarifanp.hint': 'Tüm tarife λ = (1+x)^t faktörüyle genişletilir: ESt = s·λ·T(zvE/s/λ). Bu, tüm eşiklerin orantılı kaydırılmasına tam olarak denktir. % 0, tam soğuk artan oranlılığı gösterir.',
+ 'f.I:kinder.hint': 'Altersvorsorgedepot’ta çocuk primi: yatırılan her € için 1 €, çocuk başına 300 €’ya kadar.',
+ 'f.I:kind_jahre.hint': 'Çocuk primi çocuk parası hakkına bağlıdır (§ 85 EStG), dolayısıyla tüm birikim evresi boyunca sürmez.',
+ 'f.I:kinderlos.hint': 'Bakım sigortasına, yalnız çalışan tarafından karşılanan % 0,6 puan ek pay (§ 55 Abs. 3 SGB XI).',
+ 'f.I:k_bav.hint': 'Sigorta kılıfı artı TER. Efektif maliyetler ürün bilgi formunda yer alır — orada bakın, tahmin etmeyin.',
+ 'f.I:k_av.hint': 'Standart hesapta efektif maliyetler yasayla yılda % 1,0 ile sınırlıdır.',
+ 'f.I:k_priv.hint': 'Geniş kapsamlı bir dünya ETF’sinin saf TER’i.',
+ 'f.I:infl.hint': '„Bugünkü alım gücüyle“ verilen tüm değerler için iskonto oranı. Sıralamayı neredeyse hiç değiştirmez, ama tüm düzeyleri değiştirir.',
+ 'f.I:sonst_zve.hint': 'Öncelikle burada karşılaştırılan ürünler hariç, kamu emekli aylığının vergiye tabi payı. Ödeme evresindeki marjinal vergi oranını — dolayısıyla t₀ − t₁ tarife arbitrajını — belirler.',
+ 'f.I:rente_br.hint': 'Yalnızca sağlık sigortasındaki tavan için: kamu emekli aylığı ile Versorgungsbezüge TEK bir prim tavanını paylaşır (§ 223 Abs. 3 SGB V).',
+ 'f.P:bbg_rv.hint': 'SVBezGrV 2026 (BGBl. 2025 I Nr. 116), ülke genelinde tek.',
+ 'f.P:bbg_kv.hint': 'SVBezGrV 2026; aylık 5.812,50 €.',
+ 'f.P:bezug.hint': 'SVBezGrV 2026, yıllık 47.460 €. Bunun yirmide biri sağlık sigortasında Versorgungsbezüge istisnasıdır (§ 226 Abs. 2 S. 2 SGB V).',
+ 'f.P:de_rv.hint': 'SGB VI Ek 1, 2026 değeri — emeklilik puanlarının paydası.',
+ 'f.P:rw.hint': 'Rentenwertbestimmungsverordnung 2026, 1.7.2026’dan itibaren: 42,52 € (+% 4,24).',
+ 'f.P:rv_an.hint': '% 18,6, yarı yarıya.',
+ 'f.P:av_an.hint': '% 2,6, yarı yarıya.',
+ 'f.P:kv_allg.hint': '§ 241 SGB V.',
+ 'f.P:kv_zus.hint': 'BMG duyurusu; kasaya göre değişir — kendi kasanızın oranını girin.',
+ 'f.P:pv_ges.hint': '§ 55 SGB XI. İkinci çocuktan itibaren çocuk indirimleri modellenmemiştir.',
+ 'f.P:pv_an.hint': 'Saksonya’da farklıdır (% 2,3).',
+ 'f.P:pv_kl.hint': '§ 55 Abs. 3 SGB XI, yalnız çalışan tarafından.',
+ 'f.P:gfb.hint': 'Steuerfortentwicklungsgesetz’in verdiği haliyle § 32a Abs. 1 EStG.',
+ 'f.P:e2.hint': 'Marjinal vergi oranı % 14’ten % 23,97’ye yükselir.',
+ 'f.P:e3.hint': 'Marjinal vergi oranı % 23,97’den % 42’ye yükselir.',
+ 'f.P:e4.hint': '277.826 €’dan itibaren % 45 geçerlidir.',
+ 'f.P:a2.hint': 'ESt = (a₂·y + b₂)·y, y = (zvE − asgari geçim indirimi)/10.000.',
+ 'f.P:a3.hint': 'ESt = (a₃·z + b₃)·z + c₃, z = (zvE − 17.799)/10.000.',
+ 'f.P:c4.hint': 'ESt = 0,42·zvE − c₄.',
+ 'f.P:c5.hint': 'ESt = 0,45·zvE − c₅.',
+ 'f.P:soli.hint': 'SolzG 1995.',
+ 'f.P:soli_fg.hint': '2026, temel tarife, tahakkuk eden ESt üzerinden; bölüşmede iki katı. Ayrıca bir yumuşatma bölgesi vardır.',
+ 'f.P:soli_mz.hint': '§ 3 Abs. 2a SolzG.',
+ 'f.P:an_pausch.hint': '§ 9a S. 1 Nr. 1a EStG.',
+ 'f.P:sa_pausch.hint': '§ 10c EStG.',
+ 'f.P:kapst.hint': '§ 32d Abs. 1 EStG.',
+ 'f.P:tfs.hint': '§ 20 Abs. 1 Nr. 3 i.V.m. § 20 InvStG, % 50’nin üzerinde hisse fon payı.',
+ 'f.P:sparerpb.hint': '§ 20 Abs. 9 EStG; bölüşmede iki katına çıkar. Vorabpauschale’nin büyük kısmını emer — bkz. değer etkenleri.',
+ 'f.P:basiszins.hint': '13.01.2026 tarihli BMF yazısı, § 18 Abs. 4 InvStG (2025: % 2,53). 0’a ayarlamak şu anlama gelir: Vorabpauschale yok.',
+ 'f.P:vp_faktor.hint': '§ 18 Abs. 1 S. 1 InvStG.',
+ 'f.P:st_frei_q.hint': 'BBG-RV’nin % 8’i = 2026’da 8.112 €.',
+ 'f.P:sv_frei_q.hint': '§ 1 Abs. 1 S. 1 Nr. 9 SvEV; % 4 = 2026’da 4.056 €. Aynı zamanda § 1a BetrAVG uyarınca yasal hakkın sınırı.',
+ 'f.P:zul_g1.hint': 'Altersvorsorgereformgesetz, Mayıs 2026’dan itibaren yürürlükte, uygulama 1.1.2027’den itibaren.',
+ 'f.P:zul_s1.hint': '360 €’ya kadar kendi katkısı: € başına 50 sent.',
+ 'f.P:zul_g2.hint': '361 ile 1.800 € arası: € başına 25 sent.',
+ 'f.P:zul_s2.hint': 'Teşvikli kendi katkısının azami tutarı; azami 540 € temel prim sağlar.',
+ 'f.P:kind_zul.hint': 'Yatırılan her € için 1 €, çocuk başına 300 €’ya kadar.',
+ 'f.P:av_max.hint': 'Teşvikli özel emeklilik reformu hakkında BMF SSS, 05.05.2026 tarihli. Bunun üzerindeki tutar, özel hesap gibi vergilendirilen bir yan hat üzerinden ilerler.',
+ 'f.P:av_sa_max.hint': 'MODEL VARSAYIMI, güven düzeyi yakl. % 70. 1.800 €’ya kadar kendi katkısı artı primler. Bu tek rakam, bir çocuğun AV hesabının değerini yükseltip yükseltmediğini belirler.',
+ 'f.P:ertragsq.hint': 'Teşviksiz aylık payları için § 22 Nr. 1 S. 3 Buchst. a Doppelbuchst. bb EStG.',
+ 'f.P:halb.hint': '§ 20 Abs. 1 Nr. 6 S. 2 EStG kıyasen (12 yıldan uzun sözleşme, 62’den sonra ödeme): fark tutarının yarısı. Güven düzeyi yakl. % 80.',
+
+ /* ---------------- Genel metin, altbilgi, göstergeler ---------------- */
+ 'app.meta': 'İşyeri emekliliği, Altersvorsorgedepot ve özel ETF hesabını aynı net yükte karşılaştırın. 2026 hukuki durumu.',
+ 'hdr.sub': 'İşyeri emekliliği, Altersvorsorgedepot ve özel ETF hesabı &mdash; <b>aynı net yükte</b> ve aynı ETF ile. 2026 hukuki durumu.',
+ 'input.sub': 'Rakamlar her değişiklikte anında yeniden hesaplanır. <span class="qm" style="cursor:default">?</span> ile her alan kendini açıklar.',
+ 'extra.sub': 'Burada her şeyin anlamlı öntanımları var. Yalnız size uyuyorsa dokunun.',
+ 'calc.sub': 'Adım adım izlemek isteyenler için.',
+ 'share.sub': 'Bilgileriniz yalnızca bu tarayıcıda tutulur (<kbd>localStorage</kbd>). Hiçbir şey aktarılmaz, ne sunucu ne de izleyici vardır.',
+ 'footer.1': '<b>Vergi ya da yatırım danışmanlığı değildir.</b> Bir model, sözleşme değildir. Reforme edilmiş özel emeklilik birikimiyle ilgili 2026 hukuki durumu birçok noktada henüz kesin olarak açıklığa kavuşmamıştır; güven düzeyi en düşük varsayımlar „Hesap yolu → Varsayımların dayanıklılığı“ altında yer alır ve orada değiştirilebilir.',
+ 'footer.2': 'Hesap çekirdeği birebir <span class="pill">bAV-DYNO_vs_Altersvorsorgedepot_vs_ETF.xlsx</span> Excel modelinden aktarılmış ve üç test durumuna karşı makine hassasiyetinde sınanmıştır (en büyük göreli sapma 1,3·10<sup>&minus;14</sup>).',
+ 'metric.monat.desc': 'Tüm ödeme evresi boyunca aynı değerle sabit aylık ödeme, bugünkü alım gücüyle. Bugünkü net gelirinizle doğrudan karşılaştırılabilen tek rakam.',
+ 'metric.ertrag.desc': 'Seçeneğin bugünkü alım gücüyle kendi katkısının ötesinde ne getirdiği: tüm net ödemelerin bugünkü değeri eksi net yükün bugünkü değeri.',
+ 'metric.irr.desc': 'Fiilen yatırılan net tutar üzerinden getiri, nominal. ETF’in ayarlanan brüt getirisiyle doğrudan karşılaştırılabilir — fark, teşvik ve kesintilerin birlikte ne kadar mal olduğu ya da kazandırdığıdır.',
+ 'metric.kapital.desc': 'Vergilerden ve sosyal sigorta primlerinden önce, nominal. Bilinçli olarak karar değişkeni DEĞİLDİR: bAV burada çoğu zaman önde gider, ama ödemede kaybeder.',
+ 'ui.couple': '<span>⇅</span> Aynı büyüklüğe iki bakış açısı. Birini değiştirin, diğeri onu izler.',
+ 'ui.legalNote': 'Kaynağıyla birlikte yasal büyüklükler. Yalnız hukuk değiştiyse ya da kasanız farklıysa değiştirin.',
+
+ /* ---------------- Sürgülerdeki koşullu notlar ---------------- */
+ 'n.beitrag.ueber8': function(p, f){
+ return 'RV prim tavanının % 8’inin üzerinde (yılda ' + f.eur(p.v8) + '). Bunun üzerindeki kısım '
+ + 'ne vergi ne de sosyal sigorta bakımından teşviklidir — sigorta kılıfına girer ve orada '
+ + 'yalnız sağlık sigortası prim yükümlülüğünü doğurur.'; },
+ 'n.beitrag.ueber4': function(p, f){
+ return 'RV prim tavanının % 4’ünün üzerinde (yılda ' + f.eur(p.v4) + '). Buraya kadar § 1a '
+ + 'BetrAVG uyarınca yasal hakkınız vardır, üzerinde işverenin onayı gerekir.'; },
+ 'n.agzus.gedeckelt': function(p, f){
+ return 'Şu düzeyde sınırlandı: ' + f.pct(p.quote, 1) + '. İşveren fiilen yılda yalnız '
+ + f.eur2(p.ersparnis) + ' tasarruf eder — katkı kipi „fiilî tasarruf“ olarak kaldıkça daha '
+ + 'yüksek değerler burada hiçbir şeyi değiştirmez.'; },
+ 'n.agz_fix.fliesstNicht': function(p, f){
+ return 'Akmıyor: aylık katkınız olan ' + f.eur2(p.beitrag) + ', „Ek bilgiler“ altındaki '
+ + 'asgari eşik olan ' + f.eur2(p.schwelle) + ' altında.'; },
+ 'n.agz_fix.ueber4': function(p, f){
+ return 'Sabit katkı tek başına % 4 kabını (yılda ' + f.eur(p.topf)
+ + ') ' + f.eur(p.ueber) + ' aşıyor. Bu kısım sizde prime tabi iş ücreti olurdu — model ek '
+ + 'prim yükünü KARŞI HESAPLAMAZ ve bu ölçüde bAV’yi olduğundan iyi gösterir.'; },
+ 'n.agz_fix.verdraengung': function(p, f){
+ return '% 4 kabını öncelikli olarak doldurur: kendi katkınızdan yalnız '
+ + f.eur(p.rest) + ' sosyal sigorta priminden muaf kalır. Net yükünüz bu yüzden artar — '
+ + 'katkı yine de bedava para olmaya devam eder, yalnız kendi teşvikinizin sınırını kaydırır.'; },
+ 'n.agz_fix.ueber8': 'Kendi katkınızla birlikte BBG-RV’nin % 8’inin üzerinde — fazlalık ne vergi ne de prim bakımından teşviklidir.',
+ 'n.agz_fix_min.knapp': function(p, f){
+ return 'Eşiğin yalnız ' + f.eur2(p.d) + ' üzerindesiniz. Altında sabit katkı tamamen düşer: '
+ + 'son katkı avronuzun marjinal getirisi burada sonsuzdur, brüt ↔ net bağlantısı orada '
+ + 'süreksizdir.'; },
+ 'n.agz_fix_min.verfehlt': function(p, f){
+ return 'Eşiğe ulaşılmadı — ayda ' + f.eur2(p.fehlt) + ' daha, ' + f.eur2(p.zuschuss)
+ + ' katkıyı tetikler. Bu, tüm modeldeki en değerli avro hemen hemen daima budur.'; },
+ 'n.teilkap.kosten': function(p, f){
+ return 'Maliyeti ' + (p.gewinn ? 'yok, tam tersine: ' + p.dtxt : p.dtxt + ' ' + p.unit)
+ + ', salt aylığa bağlamaya kıyasla. Neden: toplu ödeme geldiği yıl tam artan oranlı vergiye '
+ + 'tabidir (orada marjinal yük ' + f.pct(p.grenz, 1) + ') ve sonrasında ürün getirisi yerine '
+ + 'yalnız stopaj vergisi sonrası oranla faiz kazanır.'; },
+ 'n.av_auszform.horizont': function(p, f){
+ return 'Karşılaştırma ufkunun ötesinde bu aylık hâlâ ' + f.eur(p.rest)
+ + ' ödemeye devam eder; bunlar burada SAYILMAZ. Sabit bir ufuk her ömür boyu aylığı '
+ + 'sistematik olarak düşük gösterir — uzun yaşayan burada kazanır.'; },
+ 'rank.swap': function(p, f){
+ return '<b>Göstergeler birbiriyle çelişiyor.</b> Aylık edime göre '
+ + p.a + ', ' + p.b + '’nin önünde; net kazancın bugünkü değerine göre ise tam tersi. '
+ + 'Neden: bugünkü değer enflasyonla iskonto edilir (' + f.pct(p.infl, 2) + '), aylık edim '
+ + 'ise vergi sonrası yeniden yatırım faiziyle aylığa bağlanır (' + f.pct(p.wiederanl, 2) + '). '
+ + 'Bu ikisi ne kadar birbirinden uzaklaşırsa, erken bir toplu ödeme o kadar iyi görünür. '
+ + 'Hangi göstergenin geçerli olduğu, parayı yatırıp yatırmayacağınıza ya da harcayıp '
+ + 'harcamayacağınıza bağlıdır — „harcama“ durumunda „Özel ETF hesabı maliyetleri“ '
+ + 'alanındaki değeri, yeniden yatırım faizi sıfıra yaklaşacak şekilde ayarlayın.'; },
+ 'warn.unreachable': 'Bu net yüke ulaşılamıyor — ücretinizi aşıyor. Ulaşılabilecek en yüksek değer ayarlandı.',
+ 'warn.inactive': 'İlk yılda, verdiğiniz bilgilere göre artık çalışmıyorsunuz — ücret dönüşümü yok, dolayısıyla bir brüt katkının geri hesaplanabileceği bir net yük de yok. „İşten ayrılma“ ve „Bugünkü yaş“ alanlarını kontrol edin.',
+ 'verdict.lead': function(p){
+ return '<b>' + p.satz + '</b> ' + p.wert + ' ile önde — ' + p.nom2 + '’den ' + p.d2 + ' daha fazla'
+ + (p.nom3 ? ' ve ' + p.nom3 + '’den ' + p.d3 + ' daha fazla' : '') + '.'; },
+ 'verdict.top': function(p, f){
+ return ' Özel ETF hesabına karşı ' + p.gen + ' farktaki en büyük tekil kalem „' + p.label
+ + '“ — ve bu ' + p.gen + ' ' + (p.pro ? 'lehine' : 'aleyhine') + ', ' + f.eur(p.wert)
+ + ' bugünkü değerle. Tam ayrıştırma „Değer etkenleri“ altında yer alır.'; },
+ 'verdict.band': function(p, f){
+ return '<span class="band">Bu ne kadar dayanıklı? ' + f.pct(p.mid, 1) + ' yerine '
+ + f.pct(p.lo, 1) + ' brüt getiride ' + p.vlo + ', ' + f.pct(p.hi, 1) + ' getiride ise '
+ + p.vhi + ' olurdu — sıralama '
+ + (p.stabil ? 'bu aralıkta aynı kalır.'
+ : '<b>bu aralıkta tersine döner</b>, sonuç dolayısıyla burada güvenilir değil.')
+ + '</span>'; },
+ 'demo.text': '<b>Bunlar hâlâ örnek değerler</b> — 40 yaşında, yılda 75.000 € brüt ücret, ayda 300 € ücret dönüşümü, kamu sağlık sigortalısı. „Bilgileriniz“ altına kendi verilerinizi girin; bu not o zaman kendiliğinden kaybolur.',
+ 'sens.readout': 'Kesik çizgi: güncel değeriniz. Halkalar: özel hesapla kesişim noktaları. Değerler için eğrinin üzerine gelin ya da dokunun.',
+ 'sens.note': function(p){
+ return 'Son oynatılan sürgü tüm aralığı boyunca hesaplanır — ' + p.n
+ + ' tam model hesabı. Şu an: „' + p.label + '“. '
+ + 'Başka bir sürgüyü oynatın, eğri onunla birlikte değişir.'; },
+ 'sens.noteNetto': function(p, f){
+ return ' Dikkat: bu sürgü net yükü de değiştirir (burada ayda ' + f.eur2(p.lo) + ' ile '
+ + f.eur2(p.hi) + ' arası) ve dolayısıyla üç seçeneğin de yatırdığı tutarı. '
+ + 'Bu yüzden üç eğri her tek x değerinde adil biçimde karşılaştırılabilir, ama farklı x '
+ + 'değerleri arasındaki düzey öyle değildir. Kırılmalar prim tavanlarında ('
+ + f.eur(p.bbgkv) + ' KV/PV için, ' + f.eur(p.bbgrv) + ' RV/AV için) ve tarife eşiklerinde '
+ + 'bulunur.'; },
+ 'wf.check': function(p, f){
+ return 'Kontrol: ' + f.eur(p.start) + ' + ' + f.eur(p.summe) + ' = ' + f.eur(p.start + p.summe)
+ + ' (olması gereken ' + f.eur(p.ende) + ', sapma ' + f.nf2(p.start + p.summe - p.ende) + ' €).'; },
+ 'wf.note': 'Teleskopik ayrıştırma, bu yüzden tam olarak tutar — ama <b>sıraya bağlıdır</b>: etkiler toplamsal olarak ayrılamaz, her çubuk kendisinin üzerindekiler <i>verildiğinde</i> katkıyı ölçer. Türetme için bir çubuğa dokunun.',
+ 'wfb.vp.note': 'Ne bAV ne de Altersvorsorgedepot Vorabpauschale’yi (§ 18 InvStG) bilir. Vorabpauschale’siz özel hesap eksi Vorabpauschale’li özel hesap olarak ölçülür. Çubuk negatif olabilir: Vorabpauschale büyük ölçüde tasarruf götürü istisnasına gider, ama maliyet tabanını tam tutarıyla yükseltir — o zaman özel hesap için net bir avantajdır.',
+ 'wfb.zul.note': 'Yeni prim modeline göre dışarıdan gelen para artı § 10a EStG uyarınca indirim. Her iki teşvik yolunun da kapatılmasıyla ölçülür.',
+ 'wfb.arch.note': 't₀ − t₁ tarife arbitrajı ve geri kalan her şey. Zincirin tam olarak tutması için artık olarak belirlenir.',
+ 'wfb.agz.note': 'Dışarıdan gelen para — bAV’nin vergi hukukundan gelmeyen tek yapısal avantajı. Katkının kapatılmasıyla ölçülür.',
+ 'wfb.tarif.note': 'Yatırırken eksi çekerken marjinal vergi oranı, artı geri kalan her şey. Zincirin tam olarak tutması için artık olarak belirlenir. Yalnız başına vergi ertelemesi değersizdir: (1−t)(1+r)ⁿ = (1+r)ⁿ(1−t), çarpma değişmelidir.',
+ 'wfb.kvpv.note': '§§ 229, 250 SGB V: tam prim oranını emekli tek başına taşır. „Emeklilikte özel sağlık sigortası“ ayarına göre fark olarak ölçülür.',
+ 'wfb.ep.note': 'Ücret dönüşümü prime tabi ücreti ve dolayısıyla kamu emekli aylığını azaltır. Net olarak karşı hesaplanmıştır.',
+ 'kap.readout': function(p, f){
+ return 'Emeklilik başında bağlı: bAV ' + f.eur(p.bavGeb) + ' / ' + f.eur(p.bav)
+ + ' · AV hesabı ' + f.eur(p.avGeb) + ' / ' + f.eur(p.av)
+ + ' · özel hesap ' + f.eur(0) + ' / ' + f.eur(p.priv)
+ + '. Eşdeğer aylık edim tüketildiği için her seçenek sıfırda biter.'; },
+ 'kap.note': function(p, f){
+ return 'Üründeki hesap bakiyesi; ödeme evresinde buna net olarak yeniden yatırılan '
+ + 'ödemeler eklenir (vergi sonrası ' + f.pct(p.wiederanl, 2) + ') ve fiilen tüketilen '
+ + 'eşdeğer aylık edim çıkarılır. Bu yüzden her seçenek tam olarak sıfıra iner. Tüketim yalnız '
+ + 'yeniden yatırımdan çıktığı ve ürün sermayesi vergi öncesi ürün getirisiyle büyüdüğü '
+ + 'üründe kaldığı için, eğriler yine de orantılı seyretmez. '
+ + '— Kesik çizgi serbestçe kullanılabilir kısımdır: bAV emeklilik başlangıcına kadar '
+ + 'tümüyle bağlıdır (§ 1b BetrAVG hak kaybının önlenmesini bilir, kullanılabilirliği değil), '
+ + 'Altersvorsorgedepot’ta 65’ten önce çekim teşviki zedeler ve yalnız yıllık azami tutarın '
+ + 'üzerindeki fazlalık serbesttir, özel hesap her zaman serbesttir. Toplu ödemenin iyi '
+ + 'göründüğü tek eksen budur. '
+ + (p.verrentet ? 'Hesabı aylığa bağladığınız için orada da sermaye sağlayıcıya geçer — '
+ + 'eğri buna uygun olarak düşer, hiçbir şey kaybolmamış olsa da. ' : '')
+ + 'Ve bir kez daha açıkça: eğriler yalnız BU tek karardan doğan varlığı gösterir, '
+ + 'toplam varlığınızı değil.'; },
+ 'zer.readout': 'Her şey bugünkü alım gücüyle sabit aylık edim olarak. Aylığa bağlama doğrusal olduğundan bloklar tam olarak toplanır.',
+ 'zer.note': function(p, f){
+ return 'İlgili dönem üç seçenek için de aynıdır. Toplu ödeme on ikiye bölünmez, vergi '
+ + 'sonrası yeniden yatırım faiziyle (' + f.pct(p.wiederanl, 2)
+ + ' yıllık) aynı döneme yayılarak aylığa bağlanır. Sermayeyi yatırım yapmak yerine '
+ + 'tüketen daha kötü durumda kalır.'; },
+ 'det.warn.lead': 'Teşvikli koridorun dışındasınız: ',
+ 'det.warn.aussch': '% 100 kullanımın üzerinde artık ücret dönüşümüne yasal hak yoktur. ',
+ 'det.warn.ngef': 'Katkıların hissedilir bir kısmı ne vergi ne de sosyal sigorta bakımından teşviklidir — bu katman, sağlık sigortası prim yükümlülüğü dışında hiçbir karşılık almadan bir sigorta kılıfına girer. ',
+ 'det.warn.vb': 'Versorgungsbezug istisnayı belirgin biçimde aşıyor; mutlak istisnanın koruyucu etkisi 1/sermaye gibi düşer. ',
+ 'det.ann.intro': 'Sıralama, 2026’da henüz tümüyle açıklığa kavuşmamış hukuki sorulara bağlıdır. Parantez içindeki sayılar öznel güven düzeyleridir.',
+ 'det.ann.notmodelled': '<b>Modellenmemiş:</b> erken emeklilikte kesintiler, ücret dönüşümünün hastalık, işsizlik ve ebeveyn parasına etkisi, dul/yetim maaşı, iflas güvencesi (PSVaG), işveren değişiminde taşınabilirlik, bakım sigortasında çocuk indirimleri, § 32d Abs. 6 EStG uyarınca elverişlilik kontrolü, haciz ve asgari güvence koruması, ufkun ötesindeki uzun yaşam riski.',
+ 'det.prinzip': '<p><i>Brüt katkıların</i> karşılaştırılması adil olmazdı: ücret dönüşümü brütten, özel tasarruf ise netten gelir. Bu yüzden <b>net yük</b> eşitlenir:</p>'
+ + '<p style="font-family:var(--mono);font-size:.82rem;background:var(--chip);padding:9px 11px;border-radius:9px">Net yük = Brüt katkı − ücret vergisi tasarrufu − sosyal sigortada tasarruf edilen çalışan payı</p>'
+ + '<p>Tam bu tutar üç seçenekte de yatırılır. Geriye kalan, yatırım tutarlarının değil <i>teşvik mimarilerinin</i> bir karşılaştırmasıdır.</p>'
+ + '<p><b>Vergi ertelemesi tek başına değersizdir:</b> (1−t)·(1+r)ⁿ = (1+r)ⁿ·(1−t). Çarpma değişmelidir. Geriye yalnız dört değer etkeni kalır:</p>'
+ + '<ol style="padding-left:1.2em;margin:.3em 0"><li>t₀ − t₁ tarife arbitrajı</li>'
+ + '<li>Dışarıdan gelen para — işveren katkısı ya da primler</li>'
+ + '<li>vergisiz tevkifat — Vorabpauschale yok</li>'
+ + '<li>yalnız bir seçeneği etkileyen yeni kesintiler — Versorgungsbezüge üzerinden sağlık/bakım sigortası</li></ol>'
+ + '<p>4. madde bAV’nin baskın dezavantajı, 2. madde ise tek yapısal avantajıdır. bAV’nin getirisi <b>katkı tutarında kesin biçimde azalır</b>, çünkü istisna mutlaktır ve koruyucu etkisi 1/K gibi azalır — içsel bir optimum yoktur.</p>'
+ + '<p>Net yük önceden belirlendiğinde brüt katkı ikiye bölme yoluyla geri hesaplanır: N(B) süreklidir ve kesin biçimde artandır (dN/dB = 1 − marjinal sosyal sigorta oranı − marjinal vergi oranı > 0), ancak BBG-RV’nin % 4 ve % 8’indeki, prim tavanlarındaki ve tarife eşiklerindeki kırılmalar yüzünden kapalı biçimde tersine çevrilemez. 34 ikiye bölme bir sentin onda birinin altında sonuç verir.</p>',
+ 'det.s.erg': 'Üç seçenek de birikim evresinde netten tam olarak aynı tutara mal olur.',
+ 'det.s.mon': 'Tüm seçenekler aynı dönem üzerinden, bugünkü alım gücüyle aylığa bağlanmıştır. Aylığa bağlama doğrusal olduğundan satırlar tam olarak toplanır.',
+ 'det.s.diag': 'Bunun nedeni — ve teşvikli koridorun neresinde dışarıda kaldığınız.',
+ 'msg.linkCopied': 'Bağlantı kopyalandı. Onu açan, tam olarak bu rakamları görür — hiçbiri bir sunucudan geçmez.',
+ 'msg.linkFailed': 'Kopyalama başarısız oldu. Bağlantı artık adres çubuğunda.',
+ 'pwa.offline': '<b>Çevrimdışı çalışabilir.</b> Uygulama artık tarayıcı önbelleğinde ve bağlantı olmadan da çalışıyor. Kurmak için: iPhone’da „Paylaş“ → „Ana Ekrana Ekle“, Android’de menü → „Uygulamayı yükle“.',
+ 'pwa.installAsk': '<b>Uygulama olarak kurulsun mu?</b> O zaman kendi simgesiyle ana ekranda durur ve çevrimdışı çalışır. ',
+ 'pwa.declined': 'Tamam — uygulama böyle de çalışır, hem de çevrimdışı.',
+ 'pwa.file': '<b>Dosyayı doğrudan açtınız</b> (<kbd>file://</kbd>). Her şey hesaplanır, her şey kaydedilir. Yalnız iki PWA özelliği eksik: ana ekranda simge yok ve çevrimdışı önbellek yok — bu burada zaten gerekmezdi, dosya cihazda zaten duruyor. Tam uygulama deneyimi için klasörü herhangi bir HTTPS barındırma alanına koyun ve oradan açın.'
+};
diff --git a/app/i18n.uk.js b/app/i18n.uk.js
new file mode 100644
index 0000000..acb6201
--- /dev/null
+++ b/app/i18n.uk.js
@@ -0,0 +1,583 @@
+/* =====================================================================
+ Український словник — ПОВНИЙ (459 ключів).
+ Посилання на закони свідомо лишено німецькою: це первинні джерела, і
+ офіційного перекладу вони не мають. «bAV» — Entgeltumwandlung, тобто
+ корпоративна пенсія з брутто-зарплати; точного українського відповідника
+ немає, тому абревіатуру збережено. Так само «Altersvorsorgedepot» і
+ «Versorgungsbezüge» лишаються власними назвами.
+ ===================================================================== */
+window.I18N_UK = {
+ 'f.I:gehalt.label': 'Річна зарплата брутто сьогодні',
+ 'f.I:beitrag.label': 'Місячний внесок bAV, брутто',
+ 'f.I:netto_ziel.label': 'Місячні витрати нетто',
+ 'f.I:agzus.label': 'Доплата роботодавця',
+ 'f.I:agz_fix.label': 'Додаткова фіксована доплата',
+ 'f.I:agz_fix_dyn.label': 'Індексувати фіксовану доплату',
+ 'f.I:agz_fix_dyn.o0': 'номінально стала',
+ 'f.I:agz_fix_dyn.o1': 'разом із зарплатою',
+ 'f.I:agzus_sv.label': 'Режим доплати',
+ 'f.I:agzus_sv.o0': 'повний внесок',
+ 'f.I:agzus_sv.o1': 'лише звільнена частина',
+ 'f.I:agzus_sv.o2': 'фактична економія',
+ 'f.I:dyn.label': 'Індексувати внесок',
+ 'f.I:dyn.o1': 'разом із зарплатою',
+ 'f.I:dyn.o0': 'номінально сталий',
+ 'f.I:rendite.label': 'Валова дохідність ETF, річна',
+ 'f.I:alter.label': 'Вік сьогодні',
+ 'f.I:alter.unit': 'років',
+ 'f.I:rentbeg.label': 'Початок виплат',
+ 'f.I:rentbeg.unit': 'років',
+ 'f.I:kv_ruhe.label': 'Медичне страхування на пенсії',
+ 'f.I:kv_ruhe.o1': 'державне',
+ 'f.I:kv_ruhe.o2': 'приватне',
+ 'f.I:auszform.label': 'Виплата bAV',
+ 'f.I:auszform.o1': 'одноразовий капітал',
+ 'f.I:auszform.o2': 'довічна рента',
+ 'f.I:teilkap.label': 'Altersvorsorgedepot: одноразова сума на початку',
+ 'f.I:av_auszform.label': 'Altersvorsorgedepot: решта',
+ 'f.I:av_auszform.o1': 'план виплат',
+ 'f.I:av_auszform.o2': 'довічна рента',
+ 'f.I:agz_fix_min.label': 'Мінімальний власний внесок для фіксованої доплати',
+ 'f.I:rentfak_av.label': 'Рентний коефіцієнт Altersvorsorgedepot',
+ 'f.I:rentfak_av.unit': '€ на 10 000 €',
+ 'f.I:rentdyn_av.label': 'Індексація ренти рахунку, річна',
+ 'f.I:rentfak.label': 'Рентний коефіцієнт bAV',
+ 'f.I:rentfak.unit': '€ на 10 000 €',
+ 'f.I:rentdyn.label': 'Індексація ренти bAV, річна',
+ 'f.I:fuenftel.label': 'Перевірити правило однієї п’ятої',
+ 'f.I:fuenftel.o0': 'ні (обережно)',
+ 'f.I:fuenftel.o1': 'так',
+ 'f.I:planende.label': 'Горизонт порівняння до віку',
+ 'f.I:planende.unit': 'років',
+ 'f.I:ausscheid.label': 'Звільнення з роботи',
+ 'f.I:ausscheid.unit': 'років',
+ 'f.I:tzalter.label': 'Неповний день від віку',
+ 'f.I:tzalter.unit': 'років',
+ 'f.I:tzfaktor.label': 'Коефіцієнт неповного дня',
+ 'f.I:gsteig.label': 'Зростання зарплати, річне',
+ 'f.I:stkl.label': 'Спосіб оподаткування',
+ 'f.I:stkl.o1': 'окремо',
+ 'f.I:stkl.o3': 'спільно (сплітинг)',
+ 'f.I:partner.label': 'оподатковуваний дохід партнера',
+ 'f.I:kist.label': 'Ставка церковного податку',
+ 'f.I:tarifanp.label': 'Коригування меж шкали, річне',
+ 'f.I:kinder.label': 'Кількість дітей',
+ 'f.I:kind_jahre.label': 'Роки з надбавкою на дитину',
+ 'f.I:kind_jahre.unit': 'років',
+ 'f.I:kinderlos.label': 'Бездітність (надбавка до страхування догляду)',
+ 'f.I:kinderlos.o0': 'ні',
+ 'f.I:kinderlos.o1': 'так',
+ 'f.I:k_bav.label': 'Витрати на продукт bAV, річні',
+ 'f.I:k_av.label': 'Витрати на Altersvorsorgedepot, річні',
+ 'f.I:k_priv.label': 'Витрати на приватний ETF-рахунок, річні',
+ 'f.I:infl.label': 'Інфляція, річна',
+ 'f.I:sonst_zve.label': 'інший оподатковуваний дохід на пенсії',
+ 'f.I:rente_br.label': 'державна пенсія брутто, річна',
+ 'f.P:bbg_rv.label': 'Гранична база внесків пенсійного страхування (річна)',
+ 'f.P:bbg_kv.label': 'Гранична база внесків медичного страхування / догляду',
+ 'f.P:bezug.label': 'Bezugsgröße (місячна)',
+ 'f.P:de_rv.label': 'Середня зарплата (RV)',
+ 'f.P:rw.label': 'Поточна вартість пенсійного балу',
+ 'f.P:rw.unit': '€',
+ 'f.P:rv_an.label': 'Пенсійний внесок, частка працівника',
+ 'f.P:av_an.label': 'Внесок на безробіття, частка працівника',
+ 'f.P:kv_allg.label': 'Загальна ставка медичного страхування',
+ 'f.P:kv_zus.label': 'Середній додатковий внесок медстрахування',
+ 'f.P:pv_ges.label': 'Загальна ставка страхування догляду',
+ 'f.P:pv_an.label': 'Страхування догляду, частка працівника',
+ 'f.P:pv_kl.label': 'Надбавка за бездітність (догляд)',
+ 'f.P:gfb.label': 'Неоподатковуваний мінімум (кінець зони 1)',
+ 'f.P:e2.label': 'Кінець зони 2',
+ 'f.P:e3.label': 'Кінець зони 3',
+ 'f.P:e4.label': 'Початок зони 5 (податок на багатство)',
+ 'f.P:a2.label': 'Коефіцієнт a₂',
+ 'f.P:b2.label': 'Коефіцієнт b₂',
+ 'f.P:a3.label': 'Коефіцієнт a₃',
+ 'f.P:b3.label': 'Коефіцієнт b₃',
+ 'f.P:c3.label': 'Стала c₃',
+ 'f.P:c4.label': 'Стала c₄',
+ 'f.P:c5.label': 'Стала c₅',
+ 'f.P:soli.label': 'Надбавка солідарності',
+ 'f.P:soli_fg.label': 'Межа звільнення від надбавки',
+ 'f.P:soli_mz.label': 'Гранична ставка зони пом’якшення',
+ 'f.P:an_pausch.label': 'Паушальна знижка для працівників',
+ 'f.P:sa_pausch.label': 'Паушальна знижка на особливі витрати',
+ 'f.P:kapst.label': 'Ставка податку на капітал',
+ 'f.P:tfs.label': 'Часткове звільнення для акційних фондів',
+ 'f.P:sparerpb.label': 'Паушальна знижка вкладника',
+ 'f.P:basiszins.label': 'Базова ставка Vorabpauschale',
+ 'f.P:vp_faktor.label': 'Коефіцієнт базового доходу',
+ 'f.P:st_frei_q.label': 'звільнено від податку § 3 Nr. 63 (частка BBG-RV)',
+ 'f.P:sv_frei_q.label': 'звільнено від внесків (частка BBG-RV)',
+ 'f.P:zul_g1.label': 'Надбавка, щабель 1 (за € власного внеску)',
+ 'f.P:zul_s1.label': 'Межа щабля 1',
+ 'f.P:zul_g2.label': 'Надбавка, щабель 2 (за € власного внеску)',
+ 'f.P:zul_s2.label': 'Межа щабля 2',
+ 'f.P:kind_zul.label': 'Надбавка на дитину',
+ 'f.P:av_max.label': 'Максимальний внесок на рік',
+ 'f.P:av_sa_max.label': 'Максимум відрахування § 10a',
+ 'f.P:ertragsq.label': 'Частка доходу (вік 67)',
+ 'f.P:halb.label': 'оподатковувана частка різницевої суми',
+
+ /* ---------------- Рамка, заголовки вікон ---------------- */
+ 'app.title': 'Порівняння пенсійних форм',
+ 'hdr.title': 'Порівняння пенсійних форм',
+ 'win.header': 'Порівняння пенсійних форм',
+ 'win.result': 'Результат',
+ 'win.input': 'Ваші дані',
+ 'win.chart': 'Діаграми',
+ 'win.extra': 'Додаткові дані',
+ 'win.calc': 'Хід обчислення',
+ 'win.share': 'Зберегти й поділитися',
+ 'win.min': 'Згорнути',
+ 'win.restore': 'Відновити',
+ 'win.n': function(p){ return 'Вікно ' + p.n; },
+ 'ui.share': 'Скопіювати посилання з моїми числами',
+ 'ui.export': 'Зберегти у файл',
+ 'ui.import': 'Завантажити файл',
+ 'ui.reset': 'Скинути все',
+ 'ui.pin.set': 'Запам’ятати як орієнтир',
+ 'ui.pin.clear': 'Зняти орієнтир',
+ 'ui.lang': 'Мова',
+ 'ui.lang.aria': 'Вибрати мову',
+ 'ui.lang.partial': 'перекладено лише частково',
+ 'ui.lang.partialNote': 'Ця мова <b>перекладена частково</b>: інтерфейс, назви полів, заголовки таблиць і легенди діаграм є. Довгі юридичні пояснення — тексти під <span class="qm" style="cursor:default">?</span> біля полів, висновок і хід обчислення — показано німецькою. Посилання на закони (BetrAVG, EStG, SGB V) в усіх мовах німецькі: офіційно вони існують лише так.',
+ 'sb.up': 'Вгору до результату',
+
+ /* ---------------- Три варіанти ---------------- */
+ 'opt.bav.name': 'bAV (конверсія зарплати)',
+ 'opt.bav.short': 'bAV',
+ 'opt.bav.nom': 'корпоративна пенсія',
+ 'opt.bav.satz': 'Корпоративна пенсія',
+ 'opt.bav.gen': 'bAV',
+ 'opt.av.name': 'Altersvorsorgedepot',
+ 'opt.av.short': 'AV-рахунок',
+ 'opt.av.nom': 'Altersvorsorgedepot',
+ 'opt.av.satz': 'Altersvorsorgedepot',
+ 'opt.av.gen': 'Altersvorsorgedepot',
+ 'opt.priv.name': 'приватний ETF-рахунок',
+ 'opt.priv.short': 'приватний',
+ 'opt.priv.nom': 'приватний ETF-рахунок',
+ 'opt.priv.satz': 'Приватний ETF-рахунок',
+ 'opt.priv.gen': 'приватного ETF-рахунку',
+
+ /* ---------------- Показники ---------------- */
+ 'metric.monat.label': 'Місячна виплата',
+ 'metric.monat.unit': '€/місяць',
+ 'metric.ertrag.label': 'Чистий дохід (теперішня вартість)',
+ 'metric.ertrag.unit': '€',
+ 'metric.irr.label': 'Внутрішня норма дохідності',
+ 'metric.irr.unit': '% річних',
+ 'metric.kapital.label': 'Капітал на початку виплат',
+ 'metric.kapital.unit': '€',
+ 'metric.pa': ' річних',
+ 'metric.pp': ' в.п.',
+ 'metric.short.monat': 'Місяць',
+ 'metric.short.ertrag': 'Дохід',
+ 'metric.short.irr': 'IRR',
+ 'metric.short.kapital': 'Капітал',
+
+ /* ---------------- Поля введення, рамка ---------------- */
+ 'unit.pct': '%',
+ 'unit.eur': '€',
+ 'unit.eurm': '€/місяць',
+ 'ui.hintFor': function(p){ return 'Пояснення до: ' + p.label; },
+ 'ui.cnt.legal': function(p){ return p.n + ' розрахункових величин'; },
+ 'ui.cnt.fields': function(p){ return p.n + ' полів'; },
+ 'group.bav': 'Доплата й форми виплати докладно',
+ 'group.person': 'Часова вісь, звільнення, неповний день',
+ 'group.steuer': 'Податок, оподаткування, діти',
+ 'group.markt': 'Витрати й інфляція',
+ 'group.ruhe': 'Пенсія',
+ 'group.p_sv': 'Розрахункові величини: соціальне страхування 2026',
+ 'group.p_est': 'Розрахункові величини: шкала прибуткового податку 2026 (§ 32a EStG)',
+ 'group.p_kap': 'Розрахункові величини: податок на капітал та інвестфонди',
+ 'group.p_bav': 'Розрахункові величини: корпоративна та дотована приватна пенсія',
+
+ /* ---------------- Картки результату ---------------- */
+ 'card.lead': 'попереду',
+ 'card.unchanged': 'без змін',
+ 'base.pinned': 'Δ щодо збереженого стану',
+ 'base.delta': function(p){ return 'Δ ' + p.desc; },
+ 'base.none': 'Посуньте повзунок — зміна з’явиться тут як Δ.',
+ 'base.desc.prev': 'попередній стан',
+ 'base.desc.pinned': 'збережений стан',
+ 'base.desc.change': function(p){ return 'до зміни «' + p.label + '»'; },
+ 'verdict.pp': function(p){ return p.v + ' відсоткових пунктів'; },
+
+ /* ---------------- Рухома смуга ---------------- */
+ 'sb.cap': function(p){ return p.label + ' · ' + p.unit + (p.kaufkraft ? ', у сьогоднішній купівельній спроможності' : ''); },
+ 'sb.aria': function(p){ return 'Результат: ' + p.label; },
+
+ /* ---------------- Діаграми ---------------- */
+ 'tab.sens': 'Чутливість',
+ 'tab.wf': 'Чинники вартості',
+ 'tab.kap': 'Динаміка капіталу',
+ 'tab.zer': 'Розклад місячної виплати',
+ 'chart.error': function(p){ return 'Діаграму не показати: ' + p.msg; },
+ 'sens.legendY': function(p){ return 'y: ' + p.label + ' (' + p.unit + ')'; },
+ 'wf.up': 'підвищує дохід',
+ 'wf.down': 'знижує дохід',
+ 'wf.legend': 'Теперішня вартість чистого доходу, сьогоднішня купівельна спроможність',
+ 'wf.barinfo': function(p){ return p.label + ': ' + p.note; },
+ 'wfb.vp.label': 'Відпадає Vorabpauschale',
+ 'wfb.zul.label': 'Надбавки та відрахування особливих витрат',
+ 'wfb.arch.label': 'Архітектура оподаткування (решта)',
+ 'wfb.agz.label': 'Доплата роботодавця',
+ 'wfb.tarif.label': 'Арбітраж шкали та решта',
+ 'wfb.kvpv.label': 'Медстрахування/догляд на Versorgungsbezüge',
+ 'wfb.ep.label': 'Втрата пенсійних балів',
+ 'kap.rentbeg': 'Початок пенсії',
+ 'kap.swap': 'Капітал → право на ренту',
+ 'kap.legend': 'суцільна: разом &nbsp;·&nbsp; пунктир: вільно доступне',
+ 'zer.netto': 'нетто',
+ 'zer.tax': 'податок',
+ 'zer.kv': 'медстрах./догляд',
+ 'zer.pension': 'пенсія',
+ 'zer.legend': '<span><i style="background:#808080"></i>податок</span><span><i style="background:#800000"></i>медстрах./догляд</span><span><i style="background:#800080"></i>втрачена державна пенсія</span><span style="margin-left:auto">кольоровий цоколь = те, що лишається</span>',
+
+ /* ---------------- Хід обчислення ---------------- */
+ 'det.h.bav': 'bAV',
+ 'det.h.av': 'AV-рахунок',
+ 'det.h.priv': 'приватний',
+ 'det.h.kennzahl': 'Показник',
+ 'det.h.wert': 'Значення',
+ 'det.erg.netto': 'Усього внесено з нетто (номінально)',
+ 'det.erg.fremd': 'Чужі гроші (доплата чи надбавки)',
+ 'det.erg.kapital': 'Капітал на початку виплат',
+ 'det.erg.brutto': 'Сума виплат брутто',
+ 'det.erg.steuer': 'з них прибутковий податок / податок на капітал',
+ 'det.erg.kvpv': 'з них медичне страхування та страхування догляду',
+ 'det.erg.rentenverlust': 'Втрата державної пенсії (накопичено)',
+ 'det.erg.nettoausz': 'Сума виплат нетто (номінально)',
+ 'det.erg.bwausz': 'Теперішня вартість виплат нетто',
+ 'det.erg.bwaufw': 'Теперішня вартість витрат нетто',
+ 'det.erg.ertrag': 'Теперішня вартість чистого доходу',
+ 'det.erg.verhaeltnis': 'Відношення доходу до витрат',
+ 'det.erg.irr': 'Внутрішня норма дохідності (номінальна)',
+ 'det.erg.vorsprung': 'Перевага над приватним рахунком',
+ 'det.mon.brutto': 'Виплата брутто на місяць',
+ 'det.mon.steuer': 'мінус прибутковий податок / податок на капітал',
+ 'det.mon.kvpv': 'мінус медичне страхування та страхування догляду',
+ 'det.mon.ep': 'мінус втрата державної пенсії',
+ 'det.mon.netto': 'НЕТТО НА МІСЯЦЬ (сьогоднішня купівельна спроможність)',
+ 'det.diag.beitrag': 'Внесок bAV брутто на місяць',
+ 'det.diag.aufwand': 'Витрати нетто на місяць (перший рік)',
+ 'det.diag.grenzsteuer': 'Гранична ставка податку у фазі накопичення (перший рік)',
+ 'det.diag.ersparnis': 'Загальна норма економії (податок + внески), перший рік',
+ 'det.diag.svAG': 'фактична економія внесків роботодавця',
+ 'det.diag.svAN': 'фактична економія внесків працівника',
+ 'det.diag.ngef': 'Частка внесків bAV без пільги (перший рік)',
+ 'det.diag.aussch': 'Використання законного права (4 % BBG-RV)',
+ 'det.diag.agzVar': 'з них доплата роботодавця: у відсотках (перший рік)',
+ 'det.diag.agzFix': 'з них доплата роботодавця: фіксована сума (перший рік)',
+ 'det.diag.agzFixUeber4': 'фіксована доплата понад 4 %-й ліміт (не враховано як тягар внесків)',
+ 'det.diag.vbMonat': 'Versorgungsbezug на місяць на початку виплат',
+ 'det.diag.freibetrag': 'Пільга на Versorgungsbezüge того ж року',
+ 'det.diag.vbQuote': 'Відношення Versorgungsbezug до пільги',
+ 'det.diag.kapFreiKapital': 'капітал, можливий без внесків (одноразова виплата)',
+ 'det.diag.kapFreiRente': 'капітал, можливий без внесків (довічна рента)',
+ 'det.diag.memoRest': 'ПРИМІТКА: виплати ренти bAV після горизонту',
+ 'det.diag.memoRestAv': 'ПРИМІТКА: рента рахунку після горизонту',
+ 'det.diag.wiederanl': 'Ставка реінвестування після податків',
+ 'det.diag.kapstEff': 'ефективний податок на капітал разом із надбавкою й церковним податком',
+ 'det.diag.bestAnteil': 'Оподатковувана частка державної пенсії',
+ 'det.anspar.h.jahr': 'Рік',
+ 'det.anspar.h.brutto': 'Брутто',
+ 'det.anspar.h.beitrag': 'Внесок bAV',
+ 'det.anspar.h.agzVar': 'Доплата %',
+ 'det.anspar.h.agzFix': 'Доплата фікс.',
+ 'det.anspar.h.sv': 'Екон. внесків',
+ 'det.anspar.h.st': 'Екон. податку',
+ 'det.anspar.h.netto': 'Витрати нетто',
+ 'det.anspar.h.zul': 'Надбавки',
+ 'det.anspar.h.kbav': 'Капітал bAV',
+ 'det.anspar.h.kav': 'Капітал AV',
+ 'det.anspar.h.kpriv': 'Капітал приват.',
+ 'det.row.year': function(p){ return p.jahr + ' (вік ' + p.alter + ')'; },
+ 'det.ausz.h.jahr': 'Рік',
+ 'det.ausz.h.bavBr': 'bAV брутто',
+ 'det.ausz.h.kvpv': 'медстрах./догляд',
+ 'det.ausz.h.steuer': 'Податок',
+ 'det.ausz.h.mind': 'Зменшення пенсії',
+ 'det.ausz.h.bavNet': 'bAV нетто',
+ 'det.ausz.h.avBr': 'AV брутто',
+ 'det.ausz.h.avNet': 'AV нетто',
+ 'det.ausz.h.privBr': 'приват. брутто',
+ 'det.ausz.h.privNet': 'приват. нетто',
+ 'det.ann.h.annahme': 'Припущення',
+ 'det.ann.h.vertrauen': 'Довіра',
+ 'det.ann.h.anmerkung': 'Примітка',
+ 'det.ann.r1.a': 'Розрахункові величини соцстраху 2026, шкала § 32a 2026',
+ 'det.ann.r1.c': 'SVBezGrV 2026, Steuerfortentwicklungsgesetz',
+ 'det.ann.r2.a': 'Обов’язок внесків медстрах./догляду на Versorgungsbezüge',
+ 'det.ann.r2.c': '§§ 229, 250 SGB V',
+ 'det.ann.r3.a': 'Пільга § 226 Abs. 2 S. 2 SGB V (медстрахування)',
+ 'det.ann.r3.c': 'безспірно',
+ 'det.ann.r4.a': 'Гранична межа замість пільги у страхуванні догляду',
+ 'det.ann.r4.c': 'найчастіше джерело помилок у порадниках',
+ 'det.ann.r5.a': 'Звільнення виплати з AV-рахунку від внесків',
+ 'det.ann.r5.c': 'це не Versorgungsbezüge',
+ 'det.ann.r6.a': 'Половина різницевої суми для недотованих шарів',
+ 'det.ann.r6.c': '§ 22 Nr. 5 S. 2 Buchst. b i.V.m. § 20 Abs. 1 Nr. 6 S. 2 EStG',
+ 'det.ann.r7.a': 'Доплата лише до фактичної економії роботодавця',
+ 'det.ann.r7.c': 'протилежна думка читає 15 % як чистий паушал',
+ 'det.ann.r8.a': 'Максимум особливих витрат 2 340 €',
+ 'det.ann.r8.c': 'ПРИПУЩЕННЯ МОДЕЛІ. Вирішує, чи дитина підвищує вартість AV-рахунку',
+ 'det.ann.r9.a': 'Припускається обов’язкове страхування KVdR на пенсії',
+ 'det.ann.r9.c': 'добровільно застрахованих не перевірено',
+ 'det.t.prinzip': 'Принцип порівняння',
+ 'det.t.erg': 'Результат докладно',
+ 'det.t.mon': 'Місячна виплата, розкладена',
+ 'det.t.diag': 'Діагностика',
+ 'det.t.anspar': 'Фаза накопичення, рік за роком',
+ 'det.t.ausz': 'Фаза виплат, рік за роком',
+ 'det.t.ann': 'Надійність припущень',
+
+ /* ---------------- Зберегти й поділитися ---------------- */
+ 'msg.loaded': 'Завантажено.',
+ 'msg.loadError': function(p){ return 'Файл не вдалося прочитати: ' + p.msg; },
+ 'msg.reset': 'Скинуто до базового випадку.',
+
+ /* ---------------- PWA ---------------- */
+ 'pwa.installBtn': 'Встановити',
+ 'pwa.installed': '<b>Встановлено.</b> Застосунок тепер серед інших ваших застосунків.',
+
+ /* ---------------- Пояснення до полів (?) ---------------- */
+ 'f.I:gehalt.hint': 'Без одноразових виплат, за потреби включно з пропорційною часткою 13-ї зарплати. Визначає вашу граничну ставку податку та чи перевищуєте ви граничні бази внесків.',
+ 'f.I:beitrag.hint': 'Конверсія зарплати брутто за § 1a BetrAVG. Законне право є лише до 4 % граничної бази внесків RV, понад це потрібна згода роботодавця.',
+ 'f.I:netto_ziel.hint': 'Сума, на яку ваш наявний дохід зменшується в перший рік — фактично втрачене споживання і тому економічно правильна змінна рішення. Саме цю суму інвестують у всіх трьох варіантах; це умова чесного порівняння. Вона однозначно пов’язана з внеском брутто над нею: N(B) = B − економія соцвнесків − економія податку суворо монотонно зростає, отже оборотна. У замкненій формі це неможливо через зломи на граничних базах внесків і межах шкали, тому 34 половинних ділення — точність менш ніж десята частка цента.',
+ 'f.I:agzus.hint': 'Законний мінімум 15 % (§ 1a Abs. 1a BetrAVG); багато роботодавців платять більше. Точка беззбитковості щодо приватного рахунку приблизно там, де (1+z)·(1−0,211) ≈ 1, тобто z ≈ 26,7 % — можна перевірити на кривій чутливості. У режимі доплати «фактична економія» це значення часто взагалі недосяжне, бо доплата насичується раніше.',
+ 'f.I:agz_fix.hint': 'Фіксована доплата, що не залежить від суми, з тарифної угоди чи виробничої угоди — типова для Deutsche Bahn і багатьох тарифних систем, там додатково до 15 % за § 1a Abs. 1a BetrAVG. Це фінансована роботодавцем виплата за § 3 Nr. 63 EStG, і вона ПРІОРИТЕТНО заповнює 8-%-й ліміт і 4-%-е звільнення від внесків (§ 1 Abs. 1 S. 1 Nr. 9 SvEV): ваша власна конверсія тим самим витісняється і дорожчає. Економічно це база, а не важіль: граничну дохідність вашого наступного євро внеску вона не змінює (∂²дохід/∂agz_fix∂внесок ≤ 0, через витіснення може навіть її знизити), а середнє значення сильно підвищує. На кривій чутливості вона тому приблизно афінна — доки не вичерпається 4-%-й чи 8-%-й ліміт, тоді крива зламається.',
+ 'f.I:agz_fix_dyn.hint': 'Фіксовані суми здебільшого прописані в тарифній угоді номінально й підвищуються лише під час тарифних раундів — типове налаштування тому «номінально стала». За 27 років при інфляції 2 % від цього лишається коефіцієнт 1,02⁻²⁷ ≈ 0,59; хто вважає це надто песимістичним, перемикає на «разом із зарплатою» й отримує реальну доплату з темпом зростання gsteig − infl.',
+ 'f.I:agzus_sv.hint': '«Фактична економія» — це буквальний текст закону: § 1a Abs. 1a BetrAVG зобов’язує до доплати лише НАСТІЛЬКИ, наскільки роботодавець справді економить на соцвнесках. Якщо ваша зарплата перевищує обидві граничні бази внесків, він нічого не економить і нічого не винен. Тому повзунок у базовому випадку насичується приблизно на 21 %. «Повний внесок» — добровільна чи тарифна обіцянка, «лише звільнена частина» — поширена паушальна практика. Рівень довіри до буквального прочитання прибл. 75 %.',
+ 'f.I:dyn.hint': 'Якщо внесок зростає разом із зарплатою, використання 8-%-го ліміту з роками лишається приблизно сталим. Якщо він лишається номінально сталим, його реальна вартість падає з інфляцією — а разом із нею падають і витрати нетто, які отримують для порівняння два інші варіанти.',
+ 'f.I:rendite.hint': 'До витрат, до податків. У всіх трьох варіантах той самий ETF — лише так порівнюють архітектури пільг, а не інвестиційні рішення.',
+ 'f.I:alter.hint': 'Початкова точка фази накопичення. Календарний рік 0 = 2026.',
+ 'f.I:rentbeg.hint': 'Початок фази виплат усіх трьох варіантів. Altersvorsorgedepot можна виплачувати не раніше 65 років (реформа 2026).',
+ 'f.I:kv_ruhe.hint': 'Вирішальний важіль. У державному медстрахуванні корпоративні пенсії вважаються Versorgungsbezüge й несуть повну ставку внесків (§§ 229, 250 SGB V); приватне пенсійне забезпечення — ні. Саме це налаштування перевертає результат.',
+ 'f.I:auszform.hint': 'Капітал: у рік надходження повністю оподатковується, внески на медстрахування розподіляються на 120 місяців (§ 229 Abs. 1 S. 3 SGB V). Рента розтягує отримання на решту життя й тому захищає кратно більший капітал під тією самою пільгою. Модель знає лише «повністю» або «нічого»; часткова капіталізація bAV не змодельована.',
+ 'f.I:teilkap.hint': 'До 30 % накопиченого капіталу можна отримати на початку фази виплат як одноразову суму — в обох формах виплат. Це коштує з двох причин: повна прогресія у рік надходження і потім лише ставка після податку на приріст капіталу. Надлишок понад річний максимум («sleeve») перетворюється на ренту без одноразової суми; це умовність моделі, а не норма закону.',
+ 'f.I:av_auszform.hint': 'Що станеться з капіталом поза одноразовою сумою — незалежно від рішення щодо bAV над цим. План виплат: гроші лишаються інвестованими й вилучаються з відсотками; недотований шар оподатковується половиною різницевої суми. Довічна рента: капітал переходить постачальнику, натомість недотований шар оподатковується лише часткою доходу (§ 22 Nr. 5 S. 2 Buchst. a EStG, 17 % від 67 років замість приблизно 26 % тут). Дотований шар в обох випадках повністю оподатковується відкладено, це не змінюється.',
+ 'f.I:agz_fix_min.hint': 'Моделі співфінансування прив’язують фіксовану суму до мінімального власного внеску («хто конвертує щонайменше X, отримує Y»). 0 означає безумовно — тоді доплата надходить кожного активного року, навіть при нульовому внеску. Увага до семантики моделі: справді безумовна доплата не була б диференційним ефектом рішення про конверсію й зараховувалася б на користь bAV у порівнянні, хоча надходила б і без конверсії. Вказуйте лише те, що дійсно залежить від участі.',
+ 'f.I:rentfak_av.hint': 'Лише при перетворенні рахунку на ренту. Задано за замовчуванням як для bAV; договір рахунку обходиться без страхової оболонки й тому може бути вигіднішим — внесіть значення з конкретної пропозиції. При 0 ренти немає.',
+ 'f.I:rentdyn_av.hint': 'Участь у надлишку чи розвиток фонду у фазі ренти договору рахунку.',
+ 'f.I:rentfak.hint': 'Лише для форми виплати «рента». 26 € місячної ренти на 10 000 € відповідає приблизно 3,1 % норми вилучення. Вказано в інформаційному листку продукту.',
+ 'f.I:rentdyn.hint': 'Участь у надлишку чи розвиток фонду у фазі ренти.',
+ 'f.I:fuenftel.hint': '§ 34 EStG застосовується до планової капітальної виплати з договорів § 3 Nr. 63 за рішенням BFH X R 23/15 лише як виняток. Обережно: ні.',
+ 'f.I:planende.hint': 'Плани виплат тривають до цього моменту. Довічні ренти порівнюють за тим самим горизонтом; те, що надходить після, стоїть як примітка під «Діагностикою». Хто доживає до старості, виграє там.',
+ 'f.I:ausscheid.hint': 'Від цього моменту немає ні зарплати, ні внесків. Капітал далі приносить відсотки до початку виплат.',
+ 'f.I:tzalter.hint': 'Будь-яке значення від початку виплат означає: без неповного дня. Тому за замовчуванням 67.',
+ 'f.I:tzfaktor.hint': 'Частка зарплати за повний день. 60 % = 60-%-а ставка.',
+ 'f.I:gsteig.hint': 'Також переносить далі граничні бази внесків, Bezugsgröße, середню зарплату й вартість пенсійного балу.',
+ 'f.I:stkl.hint': 'Вирішальним є ВИД ОПОДАТКУВАННЯ, а не клас податку на зарплату: клас регулює лише утримання протягом року, річний розрахунок у будь-якому разі рахують зі сплітингом за § 32a Abs. 5 EStG. При «спільно» обов’язково вкажіть оподатковуваний дохід партнера.',
+ 'f.I:partner.hint': 'Лише при спільному оподаткуванні. Рахується 2·ESt((zvE + zvE_партнера)/2).',
+ 'f.I:kist.hint': '8 % у Баварії та Баден-Вюртемберзі, інакше 9 %, 0 при виході з церкви. Впливає також на податок на приріст капіталу: 0,25/(1+0,25k)·(1+0,055+k).',
+ 'f.I:tarifanp.hint': 'Уся шкала розтягується на коефіцієнт λ = (1+x)^t: ESt = s·λ·T(zvE/s/λ). Це точно еквівалентно пропорційному зсуву всіх опорних точок. 0 % показує повну холодну прогресію.',
+ 'f.I:kinder.hint': 'Надбавка на дитину в Altersvorsorgedepot: 1 € на кожен внесений €, до 300 € на дитину.',
+ 'f.I:kind_jahre.hint': 'Надбавка на дитину прив’язана до права на допомогу на дитину (§ 85 EStG), тому діє не протягом усієї фази накопичення.',
+ 'f.I:kinderlos.hint': '0,6 відсоткового пункту надбавки до страхування догляду, яку несе лише працівник (§ 55 Abs. 3 SGB XI).',
+ 'f.I:k_bav.hint': 'Страхова оболонка плюс TER. Фактичні витрати вказано в інформаційному листку продукту — перевіряйте там, а не оцінюйте.',
+ 'f.I:k_av.hint': 'У стандартному рахунку фактичні витрати законодавчо обмежені 1,0 % на рік.',
+ 'f.I:k_priv.hint': 'Чистий TER широкого світового ETF.',
+ 'f.I:infl.hint': 'Ставка дисконтування для всіх значень «у сьогоднішній купівельній спроможності». Майже не змінює порядок, але змінює всі рівні.',
+ 'f.I:sonst_zve.hint': 'Насамперед оподатковувана частка державної пенсії, без порівнюваних тут продуктів. Визначає граничну ставку податку у фазі виплат — і тим самим арбітраж шкали t₀ − t₁.',
+ 'f.I:rente_br.hint': 'Лише для ліміту в медстрахуванні: державна пенсія та Versorgungsbezüge мають ОДНУ спільну граничну базу внесків (§ 223 Abs. 3 SGB V).',
+ 'f.P:bbg_rv.hint': 'SVBezGrV 2026 (BGBl. 2025 I Nr. 116), єдина для всієї країни.',
+ 'f.P:bbg_kv.hint': 'SVBezGrV 2026; 5 812,50 € на місяць.',
+ 'f.P:bezug.hint': 'SVBezGrV 2026, 47 460 € на рік. Одна двадцята від цього — пільга на Versorgungsbezüge в медстрахуванні (§ 226 Abs. 2 S. 2 SGB V).',
+ 'f.P:de_rv.hint': 'Додаток 1 до SGB VI, значення 2026 — знаменник для пенсійних балів.',
+ 'f.P:rw.hint': 'Rentenwertbestimmungsverordnung 2026, з 1.7.2026: 42,52 € (+4,24 %).',
+ 'f.P:rv_an.hint': '18,6 %, порівну.',
+ 'f.P:av_an.hint': '2,6 %, порівну.',
+ 'f.P:kv_allg.hint': '§ 241 SGB V.',
+ 'f.P:kv_zus.hint': 'Оголошення BMG; відрізняється залежно від каси — внесіть ставку своєї каси.',
+ 'f.P:pv_ges.hint': '§ 55 SGB XI. Знижки за дітей від другої дитини не змодельовано.',
+ 'f.P:pv_an.hint': 'У Саксонії інакше (2,3 %).',
+ 'f.P:pv_kl.hint': '§ 55 Abs. 3 SGB XI, лише працівник.',
+ 'f.P:gfb.hint': '§ 32a Abs. 1 EStG у редакції Steuerfortentwicklungsgesetz.',
+ 'f.P:e2.hint': 'Гранична ставка податку зростає з 14 % до 23,97 %.',
+ 'f.P:e3.hint': 'Гранична ставка податку зростає з 23,97 % до 42 %.',
+ 'f.P:e4.hint': 'Від 277 826 € діє 45 %.',
+ 'f.P:a2.hint': 'ESt = (a₂·y + b₂)·y, де y = (zvE − неоподатковуваний мінімум)/10 000.',
+ 'f.P:a3.hint': 'ESt = (a₃·z + b₃)·z + c₃, де z = (zvE − 17 799)/10 000.',
+ 'f.P:c4.hint': 'ESt = 0,42·zvE − c₄.',
+ 'f.P:c5.hint': 'ESt = 0,45·zvE − c₅.',
+ 'f.P:soli.hint': 'SolzG 1995.',
+ 'f.P:soli_fg.hint': '2026, базова шкала, щодо нарахованого ESt; при сплітингу подвійно. Крім того, зона пом’якшення.',
+ 'f.P:soli_mz.hint': '§ 3 Abs. 2a SolzG.',
+ 'f.P:an_pausch.hint': '§ 9a S. 1 Nr. 1a EStG.',
+ 'f.P:sa_pausch.hint': '§ 10c EStG.',
+ 'f.P:kapst.hint': '§ 32d Abs. 1 EStG.',
+ 'f.P:tfs.hint': '§ 20 Abs. 1 Nr. 3 разом із § 20 InvStG, частка акцій понад 50 %.',
+ 'f.P:sparerpb.hint': '§ 20 Abs. 9 EStG; при сплітингу подвоюється. Поглинає велику частину Vorabpauschale — див. чинники вартості.',
+ 'f.P:basiszins.hint': 'Лист BMF від 13.01.2026, § 18 Abs. 4 InvStG (2025: 2,53 %). Встановити 0 означає: без Vorabpauschale.',
+ 'f.P:vp_faktor.hint': '§ 18 Abs. 1 S. 1 InvStG.',
+ 'f.P:st_frei_q.hint': '8 % від BBG-RV = 8 112 € у 2026.',
+ 'f.P:sv_frei_q.hint': '§ 1 Abs. 1 S. 1 Nr. 9 SvEV; 4 % = 4 056 € у 2026. Водночас межа законного права за § 1a BetrAVG.',
+ 'f.P:zul_g1.hint': 'Altersvorsorgereformgesetz, чинний з травня 2026, застосування з 1.1.2027.',
+ 'f.P:zul_s1.hint': 'До 360 € власного внеску: 50 центів на €.',
+ 'f.P:zul_g2.hint': 'Від 361 до 1 800 €: 25 центів на €.',
+ 'f.P:zul_s2.hint': 'Максимальна сума дотованого власного внеску; дає максимальну базову надбавку 540 €.',
+ 'f.P:kind_zul.hint': '1 € на кожен внесений €, до 300 € на дитину.',
+ 'f.P:av_max.hint': 'Часті питання BMF щодо реформи дотованого приватного пенсійного забезпечення, станом на 05.05.2026. Те, що понад це, іде побічним шляхом, який оподатковується як приватний рахунок.',
+ 'f.P:av_sa_max.hint': 'ПРИПУЩЕННЯ МОДЕЛІ, рівень довіри прибл. 70 %. Власний внесок до 1 800 € плюс надбавки. Саме це одне число вирішує, чи дитина підвищує, чи знижує вартість AV-рахунку.',
+ 'f.P:ertragsq.hint': '§ 22 Nr. 1 S. 3 Buchst. a Doppelbuchst. bb EStG, для недотованих часток ренти.',
+ 'f.P:halb.hint': '§ 20 Abs. 1 Nr. 6 S. 2 EStG за аналогією (договір понад 12 років, виплата після 62): половина різницевої суми. Рівень довіри прибл. 80 %.',
+
+ /* ---------------- Загальний текст, підвал, показники ---------------- */
+ 'app.meta': 'Порівняти корпоративну пенсію, Altersvorsorgedepot і приватний ETF-рахунок за однакових витрат нетто. Правовий стан 2026.',
+ 'hdr.sub': 'Корпоративна пенсія, Altersvorsorgedepot і приватний ETF-рахунок &mdash; за <b>однакових витрат нетто</b> й з тим самим ETF. Правовий стан 2026.',
+ 'input.sub': 'Числа перераховуються миттєво при кожній зміні. За допомогою <span class="qm" style="cursor:default">?</span> кожне поле пояснює саме себе.',
+ 'extra.sub': 'Тут усе має розумні значення за замовчуванням. Чіпайте лише те, що стосується вас.',
+ 'calc.sub': 'Для тих, хто хоче прослідкувати обчислення.',
+ 'share.sub': 'Ваші дані зберігаються виключно в цьому браузері (<kbd>localStorage</kbd>). Нічого не передається, немає ні сервера, ні трекерів.',
+ 'footer.1': '<b>Це не податкова чи інвестиційна консультація.</b> Модель — не договір. Правовий стан 2026 щодо реформованого приватного пенсійного забезпечення в кількох місцях ще не остаточно з’ясований; припущення з найнижчим рівнем довіри наведено під «Хід обчислення → Надійність припущень», і там їх можна змінити.',
+ 'footer.2': 'Розрахункове ядро перенесено один в один з Excel-моделі <span class="pill">bAV-DYNO_vs_Altersvorsorgedepot_vs_ETF.xlsx</span> і перевірено на трьох тестових випадках з машинною точністю (найбільше відносне відхилення 1,3·10<sup>&minus;14</sup>).',
+ 'metric.monat.desc': 'Стала місячна виплата протягом усієї фази виплат з однаковим значенням, у сьогоднішній купівельній спроможності. Єдине число, яке можна безпосередньо порівняти з вашим сьогоднішнім чистим доходом.',
+ 'metric.ertrag.desc': 'Що варіант дає в сьогоднішній купівельній спроможності понад власний внесок: теперішня вартість усіх виплат нетто мінус теперішня вартість витрат нетто.',
+ 'metric.irr.desc': 'Дохідність на фактично вкладену суму нетто, номінальна. Безпосередньо порівнянна з установленою валовою дохідністю ETF — різниця — це точно те, що разом коштують чи приносять пільги й відрахування.',
+ 'metric.kapital.desc': 'До податків і до соцвнесків, номінальний. Свідомо НЕ величина рішення: bAV тут часто лідирує, але програє при виплаті.',
+ 'ui.couple': '<span>⇅</span> Два погляди на ту саму величину. Змініть одну — інша піде за нею.',
+ 'ui.legalNote': 'Законодавчі величини з джерелом. Змінюйте лише якщо змінилося законодавство або ваша каса відрізняється.',
+
+ /* ---------------- Умовні примітки біля повзунків ---------------- */
+ 'n.beitrag.ueber8': function(p, f){
+ return 'Понад 8 % граничної бази внесків RV (' + f.eur(p.v8) + ' на рік). Частина понад це не '
+ + 'має ні податкової, ні соціальної пільги — вона йде в страхову оболонку й отримує там лише '
+ + 'обов’язок внесків медстрахування.'; },
+ 'n.beitrag.ueber4': function(p, f){
+ return 'Понад 4 % граничної бази внесків RV (' + f.eur(p.v4) + ' на рік). До цього моменту у вас '
+ + 'є законне право за § 1a BetrAVG, понад це потрібна згода роботодавця.'; },
+ 'n.agzus.gedeckelt': function(p, f){
+ return 'Обмежено на рівні ' + f.pct(p.quote, 1) + '. Роботодавець фактично економить лише '
+ + f.eur2(p.ersparnis) + ' на рік — вищі значення тут нічого не змінюють, поки режим доплати '
+ + 'лишається «фактична економія».'; },
+ 'n.agz_fix.fliesstNicht': function(p, f){
+ return 'Не надходить: ваш місячний внесок ' + f.eur2(p.beitrag) + ' нижчий за мінімальний '
+ + 'поріг ' + f.eur2(p.schwelle) + ' (поле під «Додатковими даними»).'; },
+ 'n.agz_fix.ueber4': function(p, f){
+ return 'Одна фіксована доплата вже перевищує 4-%-й ліміт (' + f.eur(p.topf)
+ + ' на рік) на ' + f.eur(p.ueber) + '. Ця частина у вас була б оподатковуваною внесками '
+ + 'зарплатою — модель НЕ враховує додаткове навантаження внесків і тим самим переоцінює bAV.'; },
+ 'n.agz_fix.verdraengung': function(p, f){
+ return 'Пріоритетно заповнює 4-%-й ліміт: з вашого власного внеску звільненими від соцвнесків '
+ + 'лишаються лише ' + f.eur(p.rest) + '. Ваші витрати нетто через це зростають — доплата все '
+ + 'одно лишається подарованими грішми, вона лише зсуває межу власної пільги.'; },
+ 'n.agz_fix.ueber8': 'Разом із власним внеском понад 8 % BBG-RV — надлишок не має ні податкової, ні пільги на внески.',
+ 'n.agz_fix_min.knapp': function(p, f){
+ return 'Ви лише на ' + f.eur2(p.d) + ' вище порогу. Нижче фіксована доплата зникає повністю: '
+ + 'гранична дохідність останнього євро внеску тут нескінченна, зв’язок брутто ↔ нетто там '
+ + 'розривний.'; },
+ 'n.agz_fix_min.verfehlt': function(p, f){
+ return 'Поріг не досягнуто — ще ' + f.eur2(p.fehlt) + ' на місяць запускають доплату '
+ + f.eur2(p.zuschuss) + '. Це майже завжди найвигідніший євро в усій моделі.'; },
+ 'n.teilkap.kosten': function(p, f){
+ return (p.gewinn ? 'Не коштує нічого, навпаки: ' + p.dtxt : 'Коштує ' + p.dtxt + ' ' + p.unit)
+ + ' порівняно з чистим перетворенням на ренту. Причина: одноразова сума в рік надходження '
+ + 'повністю оподатковується за прогресивною шкалою (гранична ставка там ' + f.pct(p.grenz, 1)
+ + ') і потім приносить відсотки лише за ставкою після податку на приріст капіталу замість '
+ + 'дохідності продукту.'; },
+ 'n.av_auszform.horizont': function(p, f){
+ return 'Понад горизонт порівняння ця рента ще виплачує ' + f.eur(p.rest)
+ + ', які тут НЕ враховуються. Фіксований горизонт систематично занижує будь-яку довічну '
+ + 'ренту — хто доживає до старості, виграє тут.'; },
+ 'rank.swap': function(p, f){
+ return '<b>Показники не узгоджуються.</b> За місячною виплатою '
+ + p.a + ' попереду ' + p.b + ', за теперішньою вартістю чистого доходу — навпаки. '
+ + 'Причина: теперішня вартість дисконтується інфляцією (' + f.pct(p.infl, 2) + '), місячна '
+ + 'виплата перетворюється на ренту за ставкою реінвестування після податків ('
+ + f.pct(p.wiederanl, 2) + '). Що більше вони відрізняються, то краще виглядає рання капітальна '
+ + 'виплата. Який показник діє, залежить від того, чи ви б інвестували гроші, чи витратили — '
+ + 'при «витратити» встановіть значення в полі «Витрати приватного ETF-рахунку» так, щоб '
+ + 'ставка реінвестування прямувала до нуля.'; },
+ 'warn.unreachable': 'Ці витрати нетто недосяжні — вони перевищують вашу зарплату. Встановлено найвище можливе значення.',
+ 'warn.inactive': 'У перший рік, за вашими даними, ви вже не працюєте — немає конверсії зарплати, отже немає й витрат нетто, з яких можна було б перерахувати внесок брутто. Перевірте «Звільнення з роботи» та «Вік сьогодні».',
+ 'verdict.lead': function(p){
+ return '<b>' + p.satz + '</b> попереду з ' + p.wert + ' — на ' + p.d2 + ' більше, ніж ' + p.nom2
+ + (p.nom3 ? ' і на ' + p.d3 + ' більше, ніж ' + p.nom3 : '') + '.'; },
+ 'verdict.top': function(p, f){
+ return ' Найбільшу окрему статтю в різниці ' + p.gen + ' щодо приватного ETF-рахунку формує «'
+ + p.label + '» — а саме ' + (p.pro ? 'на користь' : 'на шкоду') + ' ' + p.gen
+ + ', з теперішньою вартістю ' + f.eur(p.wert) + '. Повний розклад наведено під '
+ + '«Чинники вартості».'; },
+ 'verdict.band': function(p, f){
+ return '<span class="band">Наскільки це надійно? При валовій дохідності ' + f.pct(p.lo, 1)
+ + ' замість ' + f.pct(p.mid, 1) + ' було б ' + p.vlo + ', при ' + f.pct(p.hi, 1) + ' було б '
+ + p.vhi + ' — порядок '
+ + (p.stabil ? 'у цьому діапазоні лишається тим самим.'
+ : '<b>у цьому діапазоні змінюється на протилежний</b>, тож результат тут ненадійний.')
+ + '</span>'; },
+ 'demo.text': '<b>Це поки що приклади значень</b> — 40 років, 75 000 € річної зарплати брутто, 300 € конверсії зарплати на місяць, державне медстрахування. Внесіть під «Ваші дані» власні значення; ця примітка тоді зникне сама.',
+ 'sens.readout': 'Пунктир: ваше поточне значення. Кільця: точки перетину з приватним рахунком. Наведіть курсор або торкніться кривої для значень.',
+ 'sens.note': function(p){
+ return 'Останній пересунутий повзунок прораховується на всьому своєму діапазоні — ' + p.n
+ + ' повних прогонів моделі. Зараз: «' + p.label + '». '
+ + 'Пересуньте інший повзунок — крива зміниться разом із ним.'; },
+ 'sens.noteNetto': function(p, f){
+ return ' Увага: цей повзунок змінює й витрати нетто (тут від ' + f.eur2(p.lo) + ' до '
+ + f.eur2(p.hi) + ' на місяць) і тим самим суму, яку інвестують у всіх трьох варіантах. '
+ + 'Тому три криві чесно порівнянні при кожному окремому x, але рівень між різними x — ні. '
+ + 'Зломи розташовані на граничних базах внесків ('
+ + f.eur(p.bbgkv) + ' для KV/PV, ' + f.eur(p.bbgrv) + ' для RV/AV) і на межах шкали.'; },
+ 'wf.check': function(p, f){
+ return 'Перевірка: ' + f.eur(p.start) + ' + ' + f.eur(p.summe) + ' = ' + f.eur(p.start + p.summe)
+ + ' (мало б бути ' + f.eur(p.ende) + ', відхилення ' + f.nf2(p.start + p.summe - p.ende) + ' €).'; },
+ 'wf.note': 'Телескопічний розклад, тому сходиться точно — але він <b>залежить від порядку</b>: ефекти не розділяються адитивно, кожен стовпчик вимірює внесок <i>за умови</i> тих, що над ним. Торкніться стовпчика для виведення.',
+ 'wfb.vp.note': 'Ні bAV, ні Altersvorsorgedepot не знають Vorabpauschale (§ 18 InvStG). Виміряно як приватний рахунок без Vorabpauschale мінус із нею. Стовпчик може бути від’ємним: Vorabpauschale здебільшого йде в паушальну знижку вкладника, але повністю підвищує базу витрат — тоді для приватного рахунку це чистою є перевагою.',
+ 'wfb.zul.note': 'Чужі гроші за новою моделлю надбавок плюс відрахування за § 10a EStG. Виміряно вимкненням обох шляхів пільг.',
+ 'wfb.arch.note': 'Арбітраж шкали t₀ − t₁ і все інше. Залишок визначається так, щоб ланцюжок сходився точно.',
+ 'wfb.agz.note': 'Чужі гроші — єдина структурна перевага bAV, яка не походить з податкового права. Виміряно вимкненням доплати.',
+ 'wfb.tarif.note': 'Гранична ставка податку при внесенні мінус при виплаті, плюс усе інше. Залишок визначається так, щоб ланцюжок сходився точно. Саме лише відкладення податку не має цінності: (1−t)(1+r)ⁿ = (1+r)ⁿ(1−t), множення комутативне.',
+ 'wfb.kvpv.note': '§§ 229, 250 SGB V: повну ставку внесків несе пенсіонер самостійно. Виміряно як різницю щодо налаштування «приватне медстрахування на пенсії».',
+ 'wfb.ep.note': 'Конверсія зарплати зменшує оподатковувану внесками зарплату і тим самим державну пенсію. Враховано в чистому вигляді.',
+ 'kap.readout': function(p, f){
+ return 'На початку пенсії пов’язано: bAV ' + f.eur(p.bavGeb) + ' з ' + f.eur(p.bav)
+ + ' · AV-рахунок ' + f.eur(p.avGeb) + ' з ' + f.eur(p.av)
+ + ' · приватний рахунок ' + f.eur(0) + ' з ' + f.eur(p.priv)
+ + '. Еквівалентну місячну виплату споживають, тому кожен варіант закінчується нулем.'; },
+ 'kap.note': function(p, f){
+ return 'Стан рахунку в продукті, у фазі виплат плюс реінвестовані нетто виплати ('
+ + f.pct(p.wiederanl, 2) + ' після податків) і мінус еквівалентна місячна виплата, яку '
+ + 'фактично споживають. Тому кожен варіант закінчується точно нулем. Оскільки споживання йде '
+ + 'лише з реінвестування, а капітал продукту лишається в продукті, де він зростає з '
+ + 'дохідністю продукту до податків, криві все ж не йдуть пропорційно. '
+ + '— Пунктирна лінія — вільно доступна частина: bAV повністю пов’язана до початку пенсії '
+ + '(§ 1b BetrAVG знає незникнення права, але не доступність), в Altersvorsorgedepot '
+ + 'вилучення до 65 років шкідливе для пільги, і вільним є лише надлишок понад річний максимум, '
+ + 'приватний рахунок вільний завжди. Це єдина вісь, на якій капітальна виплата виглядає добре. '
+ + (p.verrentet ? 'Оскільки ви перетворюєте рахунок на ренту, там капітал теж переходить '
+ + 'постачальнику — крива відповідно падає, хоча нічого не втрачено. ' : '')
+ + 'І ще раз чітко: криві показують майно з ЦЬОГО одного рішення, а не все ваше майно.'; },
+ 'zer.readout': 'Усе як стала місячна виплата в сьогоднішній купівельній спроможності. Оскільки перетворення на ренту лінійне, блоки складаються точно.',
+ 'zer.note': function(p, f){
+ return 'Період віднесення однаковий для всіх трьох варіантів. Капітальну виплату не ділять '
+ + 'на дванадцять, а перетворюють на ренту за ставкою реінвестування після податків ('
+ + f.pct(p.wiederanl, 2) + ' річних) на той самий період. Хто споживає капітал замість того, '
+ + 'щоб інвестувати, опиняється в гіршому становищі.'; },
+ 'det.warn.lead': 'Ви поза межами пільгового коридору: ',
+ 'det.warn.aussch': 'Понад 100 % використання законного права на конверсію зарплати вже немає. ',
+ 'det.warn.ngef': 'Відчутна частка внесків не має ні податкової, ні соціальної пільги — цей шар потрапляє у страхову оболонку, нічого не отримуючи, крім обов’язку внесків медстрахування. ',
+ 'det.warn.vb': 'Versorgungsbezug виразно перевищує пільгу; захисна дія абсолютної пільги спадає як 1/капітал. ',
+ 'det.ann.intro': 'Порядок залежить від правових питань, які у 2026 році ще не всі з’ясовано. Числа в дужках — суб’єктивні рівні довіри.',
+ 'det.ann.notmodelled': '<b>Не змодельовано:</b> знижки при достроковому виході на пенсію, вплив конверсії зарплати на допомогу з хвороби, безробіття та по догляду за дитиною, забезпечення на випадок втрати годувальника, гарантування на випадок неплатоспроможності (PSVaG), портативність при зміні роботодавця, знижки за дітей у страхуванні догляду, перевірка вигідності за § 32d Abs. 6 EStG, захист від стягнення й прожиткового мінімуму, ризик довголіття поза горизонтом.',
+ 'det.prinzip': '<p>Порівняння <i>внесків брутто</i> було б нечесним: конверсія зарплати йде з брутто, приватні заощадження — з нетто. Тому зрівнюють <b>витрати нетто</b>:</p>'
+ + '<p style="font-family:var(--mono);font-size:.82rem;background:var(--chip);padding:9px 11px;border-radius:9px">Витрати нетто = Внесок брутто − економія податку на зарплату − заощаджена частка внесків працівника</p>'
+ + '<p>Саме цю суму інвестують у всіх трьох варіантах. Те, що лишається, — це порівняння <i>архітектур пільг</i>, а не сум внесків.</p>'
+ + '<p><b>Саме лише відкладення податку не має цінності:</b> (1−t)·(1+r)ⁿ = (1+r)ⁿ·(1−t). Множення комутативне. Лишається лише чотири чинники вартості:</p>'
+ + '<ol style="padding-left:1.2em;margin:.3em 0"><li>Арбітраж шкали t₀ − t₁</li>'
+ + '<li>Чужі гроші — доплата роботодавця чи надбавки</li>'
+ + '<li>неоподатковуване накопичення — без Vorabpauschale</li>'
+ + '<li>нові відрахування, що стосуються лише одного варіанту — медстрахування/догляд на Versorgungsbezüge</li></ol>'
+ + '<p>Пункт 4 — домінантний недолік bAV, пункт 2 — її єдина структурна перевага. Дохідність bAV <b>суворо монотонно спадає із сумою внеску</b>, бо пільга абсолютна, а її захисна дія спадає як 1/K — внутрішнього оптимуму немає.</p>'
+ + '<p>При заданих витратах нетто внесок брутто перераховується методом половинного ділення: N(B) неперервна й суворо монотонно зростає (dN/dB = 1 − гранична ставка соцвнесків − гранична ставка податку > 0), але через зломи на 4 % і 8 % BBG-RV, на граничних базах внесків і межах шкали не обертається в замкненій формі. 34 половинних ділення дають точність менш ніж десяту частку цента.</p>',
+ 'det.s.erg': 'Усі три варіанти у фазі накопичення коштують з нетто точно однакову суму.',
+ 'det.s.mon': 'Усі варіанти перетворено на ренту за тим самим періодом, у сьогоднішній купівельній спроможності. Оскільки перетворення на ренту лінійне, рядки складаються точно.',
+ 'det.s.diag': 'У чому причина — і де ви опиняєтеся поза межами пільгового коридору.',
+ 'msg.linkCopied': 'Посилання скопійовано. Хто його відкриє, побачить точно ці числа — жодне з них не проходить через сервер.',
+ 'msg.linkFailed': 'Копіювання не вдалося. Посилання тепер у рядку адреси.',
+ 'pwa.offline': '<b>Працює офлайн.</b> Застосунок тепер лежить у кеші браузера й працює навіть без з’єднання. Щоб встановити: на iPhone «Поділитися» → «На початковий екран», на Android меню → «Встановити застосунок».',
+ 'pwa.installAsk': '<b>Встановити як застосунок?</b> Тоді він з’явиться з власним значком на початковому екрані й працюватиме офлайн. ',
+ 'pwa.declined': 'Гаразд — застосунок працює і так, причому офлайн.',
+ 'pwa.file': '<b>Ви відкрили файл безпосередньо</b> (<kbd>file://</kbd>). Усе рахує, усе зберігається. Бракує лише двох властивостей PWA: значка на початковому екрані й офлайн-кешу — тут це й не потрібно, файл уже лежить на пристрої. Для повноцінного досвіду застосунку покладіть папку на будь-який HTTPS-хостинг і відкрийте звідти.'
+};
diff --git a/app/index.html b/app/index.html
index 5208c65..c9022b0 100644
--- a/app/index.html
+++ b/app/index.html
@@ -132,6 +132,31 @@ input[type=text]:focus-visible,input[type=number]:focus-visible{outline-offset:-
background:repeating-conic-gradient(var(--face) 0% 25%, var(--face-lt) 0% 50%) 0 0/2px 2px}
.seg.btnseg{margin-left:auto;align-self:flex-end;padding-bottom:2px}
.seg.btnseg button{font-size:11px;padding:3px 9px;min-height:22px}
+
+/* ---------- Sprachauswahl (Panel) ---------- *
+ Der Anker traegt position:relative, damit das absolut gesetzte Panel
+ an IHM haengt und nicht am Viewport; z-index ueber den Fenstern, weil
+ es sonst unter der naechsten Kachel verschwindet. */
+/* Linksbuendig, nicht rechts: die Kopfzeile wird von links gelesen, und eine
+ rechts ans Ende geschobene Leiste verschwindet neben der Unterzeile. */
+.langwrap{position:relative}
+.langbtn{appearance:none;background:var(--face);color:var(--ink);
+ font:11px var(--ui);padding:3px 10px;min-height:22px;cursor:pointer;white-space:nowrap;
+ border:1px solid var(--black);
+ box-shadow:inset 1px 1px 0 var(--white), inset -1px -1px 0 var(--gray)}
+.langbtn[aria-expanded=true]{font-weight:700;
+ box-shadow:inset 1px 1px 0 var(--gray), inset -1px -1px 0 var(--white)}
+/* Das Panel haengt an derselben Kante wie der Knopf — links. */
+.langpop{position:absolute;left:0;top:calc(100% + 3px);z-index:50;
+ background:var(--face);border:1px solid var(--black);padding:7px 8px 6px;
+ box-shadow:inset 1px 1px 0 var(--white), inset -1px -1px 0 var(--gray), 2px 2px 0 rgba(0,0,0,.35);
+ max-width:min(92vw,420px)}
+.langpop[hidden]{display:none}
+.langgrp+.langgrp{margin-top:6px}
+.langgrp-h{font:italic 10px var(--ui);letter-spacing:.4px;opacity:.75;margin-bottom:2px}
+.langpop .seg.btnseg{margin-left:0;align-self:auto;padding-bottom:0}
+.langlegend{font:10px var(--ui);opacity:.6;margin-top:7px;
+ border-top:1px solid var(--gray);padding-top:4px}
#cards{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}
@media(max-width:640px){#cards{grid-template-columns:1fr}}
/* Gekachelt haengt die Enge nicht mehr am Schirm, sondern am Fenster.
@@ -457,9 +482,24 @@ a{color:var(--navy)}
</div>
<script src="i18n.de.js"></script>
+<script src="i18n.de-x-amt.js"></script>
+<script src="i18n.de-x-sales.js"></script>
<script src="i18n.en.js"></script>
<script src="i18n.la.js"></script>
<script src="i18n.ja.js"></script>
+<script src="i18n.nl.js"></script>
+<script src="i18n.fr.js"></script>
+<script src="i18n.tr.js"></script>
+<script src="i18n.uk.js"></script>
+<script src="i18n.eo.js"></script>
+<script src="i18n.eu.js"></script>
+<script src="i18n.nds.js"></script>
+<script src="i18n.bar.js"></script>
+<script src="i18n.got.js"></script>
+<script src="i18n.goh.js"></script>
+<script src="i18n.gmh.js"></script>
+<script src="i18n.grc.js"></script>
+<script src="i18n.sa.js"></script>
<script>
/* =====================================================================
TEIL 0 — SPRACHEN
@@ -474,21 +514,95 @@ a{color:var(--navy)}
Sprache. Deshalb bekommen die Funktionen ROHWERTE (Zahlen) und formatieren
selbst ueber f, statt fertige Textstuecke einzusetzen.
===================================================================== */
-var LANGS = ['de','en','la','ja'], LANGKEY = 'altersvorsorge.lang';
-var DICT = { de: window.I18N_DE || {}, en: window.I18N_EN || {},
- la: window.I18N_LA || {}, ja: window.I18N_JA || {} };
+/* Sprachcodes nach ISO 639-1, wo es einen gibt, sonst 639-3. Dreibuchstabig
+ sind grc (Altgriechisch — el waere Neugriechisch und damit schlicht falsch),
+ nds (Niederdeutsch) und bar (Bairisch); keine dieser drei Sprachen hat einen
+ zweibuchstabigen Code. */
+var LANGS = ['de','de-x-amt','de-x-sales','en','nl','nds','bar','fr','eu','eo','tr','uk',
+ 'got','goh','gmh','la','grc','sa','ja'];
+var LANGKEY = 'altersvorsorge.lang';
+var DICT = { de: window.I18N_DE || {}, en: window.I18N_EN || {},
+ nl: window.I18N_NL || {}, nds: window.I18N_NDS || {},
+ bar:window.I18N_BAR || {}, fr: window.I18N_FR || {},
+ eu: window.I18N_EU || {}, eo: window.I18N_EO || {},
+ tr: window.I18N_TR || {}, uk: window.I18N_UK || {},
+ got:window.I18N_GOT || {}, goh: window.I18N_GOH || {},
+ gmh:window.I18N_GMH || {}, la: window.I18N_LA || {},
+ grc:window.I18N_GRC || {}, sa: window.I18N_SA || {},
+ ja: window.I18N_JA || {},
+ 'de-x-amt': window.I18N_DE_X_AMT || {},
+ 'de-x-sales': window.I18N_DE_X_SALES || {} };
var FMT = {}; /* wird in applyLocale() gefuellt */
+/* Autonyme fuer die Schaltflaechen. Ein Kuerzel im Knopf, der volle Name im
+ title — und zwar in der jeweiligen Sprache selbst, nicht uebersetzt: wer
+ Ukrainisch sucht, erkennt „Українська“ auch dann, wenn die Oberflaeche
+ gerade auf Baskisch steht. Das spart nebenbei 14×14 Woerterbucheintraege. */
+var AUTONYM = {
+ de:'Deutsch', en:'English', nl:'Nederlands', nds:'Plattdüütsch',
+ bar:'Boarisch', fr:'Français', eu:'Euskara', eo:'Esperanto',
+ tr:'Türkçe', uk:'Українська',
+ /* Die drei historischen Stufen tragen ihr jeweils zeitgenoessisches
+ Selbstbezeichnungswort: gutiska razda ist in Wulfilas Bibel belegt,
+ diutisc bei Notker, diutsch im klassischen Mittelhochdeutschen. */
+ got:'Gutiska razda', goh:'Diutisc', gmh:'Diutsch',
+ la:'Latina', grc:'Ἀρχαία Ἑλληνική', sa:'संस्कृतम्', ja:'日本語',
+ /* Registervarianten des Deutschen (BCP 47 § 2.2.7, privater Untertag):
+ keine Sprachen, sondern Stilebenen — das Autonym nennt daher den
+ Registernamen, nicht "Deutsch" ein zweites Mal. */
+ 'de-x-amt': 'Amtsdeutsch', 'de-x-sales': 'Vertriebsdeutsch'
+};
+
+/* Teiluebersetzte Sprachen: Oberflaeche, Feldnamen, Tabellenkoepfe und
+ Diagrammlegenden liegen vor, die langen juristischen Erlaeuterungen
+ fallen ueber tRaw() auf das Deutsche zurueck. Seit der zweiten Fassung
+ sind alle vormals teiluebersetzten Sprachen vollstaendig (459 von 459
+ Schluesseln); diese Tabelle ist daher aktuell leer, bleibt aber stehen,
+ weil pruefe.js sie erwartet und weil rechtslaeufige Sprachen (siehe
+ VORGEMERKT unten) hier voraussichtlich zuerst als Teilfassung landen. */
+var TEILWEISE = { };
+
+/* =====================================================================
+ VORGEMERKT — noch nicht gebaut. Beruehrt nicht die Woerterbuecher,
+ sondern diesen Abschnitt und das Stilblatt; deshalb steht es hier.
+
+ RECHTSLAEUFIGE SPRACHEN: he, fa, ar.
+ Die Uebersetzung ist der billige Teil. Zu tun waere:
+ - applyStatic() setzt bisher nur documentElement.lang; es braucht
+ zusaetzlich dir = RTL[LANG] ? 'rtl' : 'ltr' und eine Tabelle
+ var RTL = { he:1, fa:1, ar:1 };
+ - im Stilblatt margin-left/right und padding-left/right durch die
+ logischen Eigenschaften (margin-inline-start/-end) ersetzen, sonst
+ kippt die Kachelung. Die .seg-Leisten und .titlebar sind betroffen.
+ - Teil 8 zeichnet auf Canvas: dort gibt es keinen Bidi-Algorithmus.
+ Achsenbeschriftung, Legenden und der Wasserfall muessten gespiegelt
+ werden (ctx.setTransform mit negativem x plus Textanker rechts).
+ Das ist der eigentliche Aufwand, nicht die Sprache.
+ - fa und ar: LOCALES auf 'fa-u-nu-latn' bzw. 'ar-u-nu-latn' setzen,
+ sonst liefert ICU ostarabische Ziffern (۱۲۳۴) neben einem €.
+
+ Die Registervarianten des Deutschen (de-x-amt, de-x-sales) sind seit
+ der zweiten Fassung gebaut: siehe LANGS, DICT, AUTONYM oben sowie
+ pickLang() unten. LOCALES/GRUPPEN brauchten keine neuen Eintraege,
+ weil die bestehenden ||-Fallbacks ('de-DE' bzw. '.') fuer beide schon
+ das Richtige tun.
+ ===================================================================== */
+
/* Vorrang: ?lang= in der Adresse (teilbar) > gemerkte Wahl > Browsersprache.
- Latein wird nie automatisch gewählt — ein Browser, der la meldet, meint es
- fast sicher nicht als Anzeigesprache. */
+ Die toten und konstruierten Sprachen werden nie automatisch gewaehlt — ein
+ Browser, der la meldet, meint es fast sicher nicht als Anzeigesprache. */
function pickLang(){
- var q = /[?&]lang=([a-z]{2})/i.exec(location.search);
+ /* Grundcode 2-3 Buchstaben, danach beliebig viele BCP-47-Privatuntertags
+ (-x-amt, -x-sales, ...), je 1-8 alphanumerische Zeichen. */
+ var q = /[?&]lang=([a-z]{2,3}(?:-x-[a-z0-9]{1,8})*)/i.exec(location.search);
if (q && LANGS.indexOf(q[1].toLowerCase()) >= 0) return q[1].toLowerCase();
try { var s = localStorage.getItem(LANGKEY); if (LANGS.indexOf(s) >= 0) return s; } catch(e){}
var n = ((navigator.languages && navigator.languages[0]) || navigator.language || 'de').toLowerCase();
- if (/^ja/.test(n)) return 'ja';
- if (/^en/.test(n)) return 'en';
+ /* Laengster Praefix zuerst, damit nds vor nl und de nicht verdeckt wird. */
+ var auto = ['nds','bar','ja','nl','fr','eu','eo','tr','uk','en'];
+ for (var i = 0; i < auto.length; i++){
+ if (n === auto[i] || n.indexOf(auto[i] + '-') === 0) return auto[i];
+ }
return 'de';
}
var LANG = pickLang();
@@ -1325,8 +1439,18 @@ function encodeState() {
bekommt die kontinentale Schreibweise — römische Ziffern wären ein Witz auf
Kosten der Lesbarkeit, und die Trennzeichenkonvention ist ohnehin jünger
als jede lateinische Quelle. Japanisch gruppiert wie das Englische. */
-var LOCALES = { de:'de-DE', en:'en-GB', la:'de-DE', ja:'ja-JP' };
-var GRUPPEN = { de:'.', en:',', la:'.', ja:',' };
+var LOCALES = { de:'de-DE', en:'en-GB', nl:'nl-NL', nds:'de-DE', bar:'de-DE',
+ fr:'fr-FR', eu:'eu-ES', eo:'de-DE', tr:'tr-TR', uk:'uk-UA',
+ got:'de-DE', goh:'de-DE', gmh:'de-DE',
+ la:'de-DE', grc:'de-DE', sa:'de-DE', ja:'ja-JP' };
+/* Nur fuer den mehrdeutigen Eingabefall „1,234“ relevant, siehe parseNum().
+ Sprachen mit schmalem Leerraum als Tausendertrenner (fr, uk) bekommen
+ U+202F: dann matcht weder Punkt noch Komma, und beide werden als
+ Dezimalzeichen gelesen — genau richtig. */
+var GRUPPEN = { de:'.', en:',', nl:'.', nds:'.', bar:'.',
+ fr:' ', eu:'.', eo:'.', tr:'.', uk:' ',
+ got:'.', goh:'.', gmh:'.',
+ la:'.', grc:'.', sa:'.', ja:',' };
var LOCALE = 'de-DE', nf0 = null, nf2 = null, nfp = null;
function applyLocale(){
LOCALE = LOCALES[LANG] || 'de-DE';
@@ -2644,27 +2768,187 @@ function applyStatic(){
WINCHROME.forEach(function(fn){ fn(); });
}
+/* =====================================================================
+ SPRACHAUSWAHL
+
+ Neunzehn Knoepfe nebeneinander sind keine Auswahl mehr, sondern eine
+ Wand. Also: ein Knopf oeffnet ein Panel, das Panel gliedert nach
+ Sprachverwandtschaft. Die Gliederung ist genealogisch und flach —
+ eine Partition der Menge LANGS, keine Baumnavigation; ein Baum mit
+ 19 Blaettern hat mehr Knoten als Blaetter und kostet nur Klicks.
+
+ WARUM DIE GRUPPENNAMEN LATEINISCH SIND. Sie muessten sonst in jede
+ der 19 Sprachen uebersetzt werden — sechs Gruppen mal 19 Sprachen
+ sind 114 zusaetzliche Woerterbucheintraege, davon etliche in
+ Gotisch, Sanskrit und Althochdeutsch, fuer die es die Termini
+ „Indogermanistik" schlicht nicht gibt. Dasselbe Argument, das oben
+ die Autonyme begruendet: eine sprachneutrale Konvention statt n²
+ Eintraege. Die wissenschaftliche Nomenklatur ist im Lateinischen
+ ohnehin zu Hause (Linné lässt gruessen), und wer „Germanica" liest,
+ erkennt seine Gruppe in jeder der 19 Oberflaechensprachen wieder.
+
+ Das Kreuz † markiert historische Sprachstufen ohne heutige
+ Sprechergemeinschaft — got, goh, gmh, la, grc, sa.
+ ===================================================================== */
+var FAMILIEN = [
+ /* Registervarianten sind keine eigenen Sprachen, sondern Stilebenen
+ derselben (BCP 47 § 2.2.7). Sie stehen deshalb zusammen und zuerst,
+ nicht verteilt im germanischen Zweig. */
+ { tax:'Theodisca — registra', langs:['de','de-x-amt','de-x-sales'] },
+ { tax:'Germanica', langs:['nds','nl','en','bar','gmh','goh','got'] },
+ { tax:'Italica', langs:['fr','la'] },
+ { tax:'Indoeuropaea cetera', langs:['uk','grc','sa'] },
+ { tax:'Extra Indoeuropaeam', langs:['eu','tr','ja'] },
+ { tax:'Ficta', langs:['eo'] }
+];
+/* Zweigangabe fuer die Sammelgruppen, damit „cetera" nicht nur ein
+ Restposten ist: sie steht im title des jeweiligen Knopfes. */
+var ZWEIG = { uk:'Slavica', grc:'Hellenica', sa:'Indoaryana',
+ eu:'lingua sola (isolata)', tr:'Turcica', ja:'Iaponica' };
+var HISTORISCH = { got:1, goh:1, gmh:1, la:1, grc:1, sa:1 };
+
+/* Konsistenzpruefung zur Ladezeit: die Familien muessen eine Partition
+ von LANGS sein — keine Sprache doppelt, keine vergessen. Eine neue
+ Sprache in LANGS ohne Eintrag hier faellt sonst lautlos aus dem
+ Panel heraus, und genau das ist der Fehler, den niemand bemerkt. */
+(function(){
+ var flach = FAMILIEN.reduce(function(a,g){ return a.concat(g.langs); }, []);
+ var fehlt = LANGS.filter(function(l){ return flach.indexOf(l) < 0; });
+ var zuviel = flach.filter(function(l){ return LANGS.indexOf(l) < 0; });
+ var doppelt = flach.filter(function(l,i){ return flach.indexOf(l) !== i; });
+ if (fehlt.length || zuviel.length || doppelt.length){
+ console.warn('FAMILIEN ist keine Partition von LANGS —',
+ 'fehlt:', fehlt, 'unbekannt:', zuviel, 'doppelt:', doppelt);
+ }
+})();
+
+var langPopOffen = false;
+
+function langKnopf(l){
+ /* Registervarianten (de-x-amt, de-x-sales) sind zu lang fuer den
+ Knopf ("DE-X-AMT"); der Teil nach dem letzten Bindestrich reicht
+ zur Unterscheidung, weil lang="..." und AUTONYM ohnehin den vollen
+ Code bzw. Namen tragen. */
+ var kurz = l.indexOf('-') >= 0 ? l.slice(l.lastIndexOf('-') + 1) : l;
+ var b = el('button', null, kurz.toUpperCase() + (HISTORISCH[l] ? ' †' : ''));
+ b.type = 'button';
+ /* Der Name steht im Autonym da, nicht uebersetzt — siehe AUTONYM. */
+ b.title = AUTONYM[l]
+ + (ZWEIG[l] ? ' — ' + ZWEIG[l] : '')
+ + (TEILWEISE[l] ? ' — ' + t('ui.lang.partial') : '');
+ b.setAttribute('lang', l);
+ b.setAttribute('aria-label', AUTONYM[l]);
+ b.setAttribute('aria-pressed', LANG === l);
+ return b;
+}
+
function buildLangBar(){
var host = $('#langrow');
if (!host) return;
host.innerHTML = '';
- host.appendChild(el('span','sub', t('ui.lang') + ': '));
- var seg = el('div','seg btnseg');
- seg.style.marginLeft = '0';
- seg.setAttribute('role','group');
- seg.setAttribute('aria-label', t('ui.lang.aria'));
- LANGS.forEach(function(l){
- var b = el('button', null, l.toUpperCase());
- b.type = 'button';
- b.title = t('ui.lang.' + l);
- b.setAttribute('lang', l);
- b.setAttribute('aria-pressed', LANG === l);
- b.onclick = function(){ setLang(l); };
- seg.appendChild(b);
+ langPopOffen = false;
+
+ var wrap = el('div','langwrap');
+
+ var knopf = el('button','langbtn', t('ui.lang') + ': ' + AUTONYM[LANG] + ' ▾');
+ knopf.type = 'button';
+ knopf.id = 'langbtn';
+ knopf.setAttribute('lang', LANG);
+ /* aria-haspopup="dialog" passt zum role="dialog" des Panels; aria-expanded
+ traegt den Zustand. Beides zusammen ist das Muster, das Screenreader als
+ Aufklappmenue ansagen (WAI-ARIA 1.2 § 5.2.6). */
+ knopf.setAttribute('aria-haspopup','dialog');
+ knopf.setAttribute('aria-expanded','false');
+ knopf.setAttribute('aria-controls','langpop');
+
+ var pop = el('div','langpop');
+ pop.id = 'langpop';
+ pop.hidden = true;
+ pop.setAttribute('role','dialog');
+ pop.setAttribute('aria-modal','false');
+ pop.setAttribute('aria-label', t('ui.lang.aria'));
+
+ FAMILIEN.forEach(function(g){
+ var box = el('div','langgrp');
+ box.setAttribute('role','group');
+ box.setAttribute('aria-label', g.tax);
+ box.appendChild(el('div','langgrp-h', g.tax));
+ var seg = el('div','seg btnseg');
+ seg.style.marginLeft = '0';
+ g.langs.forEach(function(l){
+ var b = langKnopf(l);
+ b.onclick = function(){ langPopSchliessen(false); setLang(l); };
+ seg.appendChild(b);
+ });
+ box.appendChild(seg);
+ pop.appendChild(box);
});
- host.appendChild(seg);
+
+ /* Legende zum Kreuz. Sprachneutral gehalten (Zeichen + lateinischer
+ Terminus), aus demselben Grund wie die Gruppennamen. */
+ var leg = el('div','langlegend', '† linguae mortuae');
+ pop.appendChild(leg);
+
+ knopf.onclick = function(){ langPopOffen ? langPopSchliessen(true) : langPopOeffnen(); };
+
+ wrap.appendChild(knopf);
+ wrap.appendChild(pop);
+ host.appendChild(wrap);
+
+ if (TEILWEISE[LANG]){
+ var n = el('div','sub');
+ n.style.cssText = 'flex-basis:100%;margin-top:3px';
+ n.innerHTML = t('ui.lang.partialNote');
+ host.appendChild(n);
+ }
}
+function langPopOeffnen(){
+ var pop = $('#langpop'), knopf = $('#langbtn');
+ if (!pop || !knopf) return;
+ pop.hidden = false;
+ knopf.setAttribute('aria-expanded','true');
+ langPopOffen = true;
+ /* Der Fokus wandert auf die gerade aktive Sprache — das ist die Stelle,
+ von der aus der Nutzer denkt, nicht der Anfang der Liste. */
+ var akt = pop.querySelector('button[aria-pressed=true]') || pop.querySelector('button');
+ if (akt) akt.focus();
+}
+
+function langPopSchliessen(fokusZurueck){
+ var pop = $('#langpop'), knopf = $('#langbtn');
+ if (!pop || !knopf) return;
+ pop.hidden = true;
+ knopf.setAttribute('aria-expanded','false');
+ langPopOffen = false;
+ if (fokusZurueck) knopf.focus();
+}
+
+/* Die beiden Weltzustandsbeobachter werden EINMAL angemeldet, nicht bei
+ jedem buildLangBar() — sonst haetten wir nach n Sprachwechseln n
+ Handler, die alle dasselbe tun (ein klassisches Leck). */
+document.addEventListener('keydown', function(e){
+ if (!langPopOffen) return;
+ if (e.key === 'Escape'){ e.preventDefault(); langPopSchliessen(true); return; }
+ if (e.key !== 'Tab') return;
+ /* Fokusfalle: das Panel ist ein Dialog, also zyklisch. Die Liste der
+ fokussierbaren Elemente ist hier trivial — es sind ausschliesslich
+ Knoepfe, keine versteckten, keine tabindex=-1. */
+ var pop = $('#langpop');
+ if (!pop) return;
+ var f = [].slice.call(pop.querySelectorAll('button'));
+ if (!f.length) return;
+ var i = f.indexOf(document.activeElement);
+ e.preventDefault();
+ var j = e.shiftKey ? (i <= 0 ? f.length - 1 : i - 1) : (i < 0 || i === f.length - 1 ? 0 : i + 1);
+ f[j].focus();
+}, true);
+document.addEventListener('pointerdown', function(e){
+ if (!langPopOffen) return;
+ var wrap = e.target && e.target.closest ? e.target.closest('.langwrap') : null;
+ if (!wrap) langPopSchliessen(false);
+}, true);
+
function setLang(l){
if (l === LANG || LANGS.indexOf(l) < 0) return;
LANG = l;
diff --git a/app/manifest.json b/app/manifest.json
index 3523ab4..9f346f1 100644
--- a/app/manifest.json
+++ b/app/manifest.json
@@ -47,14 +47,19 @@
"url": "./?lang=en"
},
{
- "name": "Latine",
- "short_name": "LA",
- "url": "./?lang=la"
+ "name": "Nederlands",
+ "short_name": "NL",
+ "url": "./?lang=nl"
},
{
- "name": "日本語",
- "short_name": "JA",
- "url": "./?lang=ja"
+ "name": "Plattdüütsch",
+ "short_name": "NDS",
+ "url": "./?lang=nds"
+ },
+ {
+ "name": "Boarisch",
+ "short_name": "BAR",
+ "url": "./?lang=bar"
}
]
}
diff --git a/app/pruefe.js b/app/pruefe.js
index 31bc7c4..eefa941 100644
--- a/app/pruefe.js
+++ b/app/pruefe.js
@@ -21,9 +21,13 @@ const { JSDOM } = (() => {
Wechsel der Arbeitsumgebung nicht. */
const APP = __dirname;
let html = fs.readFileSync(path.join(APP, 'index.html'), 'utf8');
-// Die beiden Wörterbücher werden eingebettet, damit der Test ohne
-// Ressourcenlader auskommt; inhaltlich ist das dasselbe wie <script src>.
-for (const f of ['i18n.de.js', 'i18n.en.js', 'i18n.la.js', 'i18n.ja.js']) {
+// Die Wörterbücher werden eingebettet, damit der Test ohne Ressourcenlader
+// auskommt; inhaltlich ist das dasselbe wie <script src>. Die Liste wird nicht
+// gepflegt, sondern aus index.html gelesen — eine neue Sprache soll den Test
+// nicht stillschweigend an einem leeren Objekt vorbeilaufen lassen.
+const WB = [...html.matchAll(/<script src="(i18n\.[a-z][a-z0-9-]*\.js)"><\/script>/g)].map(m => m[1]);
+if (WB.length < 2) { console.error('Keine Wörterbücher in index.html gefunden.'); process.exit(2); }
+for (const f of WB) {
html = html.replace('<script src="' + f + '"></script>',
'<script>' + fs.readFileSync(path.join(APP, f), 'utf8') + '</script>');
}
@@ -63,6 +67,21 @@ setTimeout(() => {
const bad = [];
const check = (name, cond, info) => (cond ? ok : bad).push(name + (info ? ' — ' + info : ''));
+ /* Zuerst: hat das Hauptskript ueberhaupt geparst? Ein Syntaxfehler darin —
+ etwa ein Blockkommentar, den ein '*' vor einem Schraegstrich vorzeitig
+ schliesst — laesst jede spaetere Zeile an einem undefined scheitern und
+ verschuettet die eigentliche Meldung. Deshalb hier abbrechen, nicht
+ weiterlaufen. */
+ if (typeof w.LANGS === 'undefined' || typeof w.t !== 'function' || !w.S) {
+ console.log('ABBRUCH: das Hauptskript in index.html hat nicht geparst.');
+ fehler.forEach(f => console.log(' ' + f));
+ process.exit(2);
+ }
+ check('Hauptskript geparst', true, w.LANGS.length + ' Sprachen');
+ const WBSOLL = w.LANGS.length;
+ check('ein Wörterbuch je Sprache in LANGS',
+ w.LANGS.every(l => w.DICT[l] && Object.keys(w.DICT[l]).length > 0),
+ w.LANGS.filter(l => !w.DICT[l] || !Object.keys(w.DICT[l]).length).join(' '));
check('Wörterbücher geladen', !!w.I18N_DE && !!w.I18N_EN && !!w.I18N_LA && !!w.I18N_JA);
check('Startsprache aus ?lang=de', w.LANG === 'de', 'LANG=' + w.LANG);
check('keine Skriptfehler beim Start', fehler.length === 0, fehler.join(' | '));
@@ -194,6 +213,58 @@ setTimeout(() => {
!/(Rentenbeginn|Nettoaufwand|Bruttorendite|Monatsleistung|Beispielwerte)/.test(laTxt),
(laTxt.match(/Rentenbeginn|Nettoaufwand|Bruttorendite|Monatsleistung|Beispielwerte/g)||[]).join(' '));
+ // --- Teilsprachen: Rückfall auf Deutsch muss greifen, nicht klaffen ---
+ // Der Rückfall ist kein Schönheitsfehler, sondern die Zusicherung: fehlt ein
+ // Schlüssel, erscheint der deutsche Eintrag — nie ein Leerstring und nie der
+ // Schlüssel selbst. Genau das wird hier für jede Teilsprache nachgewiesen.
+ Object.keys(w.TEILWEISE).forEach(function(l){
+ w.setLang(l);
+ const eigen = Object.keys(w.DICT[l]);
+ const fehlend = Object.keys(w.I18N_DE).filter(k => !(k in w.DICT[l]));
+ check('Teilsprache ' + l + ': Schlüssel eigen/geerbt',
+ eigen.length > 0 && fehlend.length > 0, eigen.length + '/' + fehlend.length);
+ // Kein eigener Eintrag darf leer sein oder den Typ wechseln.
+ const kaputt = eigen.filter(k => typeof w.DICT[l][k] !== typeof w.I18N_DE[k]
+ || w.DICT[l][k] === '');
+ check('Teilsprache ' + l + ': Typen und Leerstrings', kaputt.length === 0, kaputt.join(' '));
+ // Jeder geerbte Schlüssel liefert den deutschen Text — nicht den Schlüssel.
+ const durchgefallen = fehlend.filter(k => typeof w.I18N_DE[k] === 'string'
+ && w.t(k) !== w.I18N_DE[k]);
+ check('Teilsprache ' + l + ': Rückfall liefert Deutsch',
+ durchgefallen.length === 0, durchgefallen.slice(0,3).join(' '));
+ // Und die Sprachleiste sagt es dem Nutzer.
+ const zeile = w.$('#langrow');
+ const hinweis = [].slice.call(zeile.children)
+ .filter(n => n.className === 'sub' && n.style.flexBasis === '100%');
+ check('Teilsprache ' + l + ': Hinweis in der Sprachleiste',
+ hinweis.length === 1 && /<b>/.test(hinweis[0].innerHTML));
+ });
+ // Umgekehrt: Vollsprachen dürfen den Hinweis NICHT zeigen.
+ w.LANGS.filter(l => !w.TEILWEISE[l]).forEach(function(l){
+ w.setLang(l);
+ const zeile = w.$('#langrow');
+ const hinweis = [].slice.call(zeile.children)
+ .filter(n => n.className === 'sub' && n.style.flexBasis === '100%');
+ check('Vollsprache ' + l + ': kein Teilhinweis', hinweis.length === 0);
+ check('Vollsprache ' + l + ': Wörterbuch vollständig',
+ Object.keys(w.DICT[l]).length === Object.keys(w.I18N_DE).length,
+ Object.keys(w.DICT[l]).length + ' von ' + Object.keys(w.I18N_DE).length);
+ });
+ // Dreibuchstabige Codes müssen den Adressparameter überstehen.
+ ['grc','nds','bar','got','goh','gmh'].forEach(function(l){
+ w.setLang('de'); w.setLang(l);
+ check('Adresse trägt ' + l, new RegExp('lang=' + l + '(?:&|$)').test(w.location.search),
+ w.location.search);
+ });
+ // Bindestrich-Untertags (Registervarianten) müssen denselben Weg überstehen
+ // — sowohl das Setzen der Adresse als auch das Zurücklesen via pickLang().
+ ['de-x-amt','de-x-sales'].forEach(function(l){
+ w.setLang('de'); w.setLang(l);
+ check('Adresse trägt ' + l, new RegExp('lang=' + l + '(?:&|$)').test(w.location.search),
+ w.location.search);
+ check('pickLang liest ' + l + ' zurück', w.pickLang() === l, w.pickLang());
+ });
+
// --- zurück auf Deutsch ---
w.setLang('de');
check('Rückschaltung', w.LANG === 'de' && /Ergebnis/.test(sichtbar()));
diff --git a/app/service-worker.js b/app/service-worker.js
index 562291e..d47fd2a 100644
--- a/app/service-worker.js
+++ b/app/service-worker.js
@@ -1,7 +1,7 @@
/* Altersvorsorge-Vergleich — Service Worker
*
* Strategie: stale-while-revalidate für alles im Scope.
- * Die App besteht aus einer Seite und vier Woerterbuechern, ohne Backend; Korrektheit hängt
+ * Die App besteht aus einer Seite und neunzehn Woerterbuechern, ohne Backend; Korrektheit hängt
* also nicht an Frische, wohl aber Verfügbarkeit. Deshalb wird sofort aus
* dem Cache geliefert und im Hintergrund aktualisiert. Beim Aktivieren
* werden alte Cache-Versionen gelöscht.
@@ -9,13 +9,28 @@
* Beim Ändern der App die Version hochzählen — sonst sieht ein bereits
* installierter Client die Änderung erst nach zwei Aufrufen.
*/
-const VERSION = 'av-v16';
+const VERSION = 'av-v21';
const ASSETS = [
'./',
'./index.html',
'./i18n.de.js',
+ './i18n.de-x-amt.js',
+ './i18n.de-x-sales.js',
'./i18n.en.js',
+ './i18n.nl.js',
+ './i18n.nds.js',
+ './i18n.bar.js',
+ './i18n.fr.js',
+ './i18n.eu.js',
+ './i18n.eo.js',
+ './i18n.tr.js',
+ './i18n.uk.js',
'./i18n.la.js',
+ './i18n.got.js',
+ './i18n.goh.js',
+ './i18n.gmh.js',
+ './i18n.grc.js',
+ './i18n.sa.js',
'./i18n.ja.js',
'./manifest.json',
'./icon-192.png',
@@ -27,11 +42,11 @@ self.addEventListener('install', (e) => {
e.waitUntil(
caches.open(VERSION)
/* addAll ist atomar: fehlt eine Datei, faellt alles durch. Der
- Rueckfall auf die blosse Seite waere dann aber eine App ohne
- Woerterbuch — deshalb die drei Pflichtdateien zusammen. */
+ Rueckfall traegt nur index.html und das deutsche Woerterbuch: das
+ ist zugleich die Rueckfallebene von tRaw(), also die kleinste Menge,
+ mit der die App vollstaendig beschriftet laeuft. */
.then((c) => c.addAll(ASSETS)
- .catch(() => c.addAll(['./index.html', './i18n.de.js', './i18n.en.js',
- './i18n.la.js', './i18n.ja.js'])))
+ .catch(() => c.addAll(['./index.html', './i18n.de.js'])))
.then(() => self.skipWaiting())
);
});