Weltküche: Heimat-Regel – Zutaten folgen dem Gericht statt Zufall
Löst "warum kommt Deutschland nicht vor?": In regionalen Gerichten kommt jede Zutat, die das Herkunftsland selbst erzeugt, von dort (Tiroler Gröstl → Tiroler Speck/Kartoffeln aus Österreich). Nur was hier nicht wächst (Pfeffer, Olivenöl) reist von weit her – die eigentliche Lektion. Datengetrieben: Test "erzeugt das Heimatland die Zutat?" filtert automatisch, kein Länder-Bias (hängt am Gericht). - dishes.json: heimat (25 Gerichte) + signature-Labels (5); exotische ohne heimat - buildTaskFor: Heimat-Regel sticht Zufall aus, wenn Heimatland Produzent ist - Klick-Feedback beantwortet "warum nicht Deutschland?" direkt (showWrong/explainChoice) - Auflösung erklärt Heimat-Logik + zeigt Antwort auch wenn kein Top-5-Produzent Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -64,7 +64,11 @@
|
|||||||
},
|
},
|
||||||
"fact": "Gröstl bedeutet ‚klein geschnitten und gebraten' — entstand als Resteessen aus den Erdäpfeln und dem Speck vom Vortag in den Almhütten. Mit Spiegelei wird es zum vollwertigen ‚Bauern-Gröstl'.",
|
"fact": "Gröstl bedeutet ‚klein geschnitten und gebraten' — entstand als Resteessen aus den Erdäpfeln und dem Speck vom Vortag in den Almhütten. Mit Spiegelei wird es zum vollwertigen ‚Bauern-Gröstl'.",
|
||||||
"diff_note": "einfach zu kochen, Anfänger:in-tauglich, 1 Pfanne reicht",
|
"diff_note": "einfach zu kochen, Anfänger:in-tauglich, 1 Pfanne reicht",
|
||||||
"id": "tiroler-groestl"
|
"id": "tiroler-groestl",
|
||||||
|
"heimat": "oesterreich",
|
||||||
|
"signature": {
|
||||||
|
"speck": "Tiroler Speck"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"kaerntner-kasnudeln": {
|
"kaerntner-kasnudeln": {
|
||||||
"name": "Kärntner Kasnudeln",
|
"name": "Kärntner Kasnudeln",
|
||||||
@@ -119,7 +123,8 @@
|
|||||||
},
|
},
|
||||||
"fact": "Das ‚Krendeln' (die geriffelte Naht am Rand) gilt als Erkennungszeichen einer guten Kärntner Hausfrau — wer es nicht beherrscht, hat die Nudeln früher angeblich nicht serviert. Jede Familie hat ihre eigene Füll-Variante.",
|
"fact": "Das ‚Krendeln' (die geriffelte Naht am Rand) gilt als Erkennungszeichen einer guten Kärntner Hausfrau — wer es nicht beherrscht, hat die Nudeln früher angeblich nicht serviert. Jede Familie hat ihre eigene Füll-Variante.",
|
||||||
"diff_note": "Profi-Handarbeit — das Krendeln (Naht-Riffeln) braucht echte Übung",
|
"diff_note": "Profi-Handarbeit — das Krendeln (Naht-Riffeln) braucht echte Übung",
|
||||||
"id": "kaerntner-kasnudeln"
|
"id": "kaerntner-kasnudeln",
|
||||||
|
"heimat": "oesterreich"
|
||||||
},
|
},
|
||||||
"steirisches-wurzelfleisch": {
|
"steirisches-wurzelfleisch": {
|
||||||
"name": "Steirisches Wurzelfleisch",
|
"name": "Steirisches Wurzelfleisch",
|
||||||
@@ -173,7 +178,8 @@
|
|||||||
},
|
},
|
||||||
"fact": "Der ‚Kren' (Meerrettich) ist in der Steiermark seit Jahrhunderten kultiviert und bekommt im Herbst die meiste Schärfe. Das frische Reiben treibt Tränen — und gibt dem Wurzelfleisch erst seinen typischen Kick.",
|
"fact": "Der ‚Kren' (Meerrettich) ist in der Steiermark seit Jahrhunderten kultiviert und bekommt im Herbst die meiste Schärfe. Das frische Reiben treibt Tränen — und gibt dem Wurzelfleisch erst seinen typischen Kick.",
|
||||||
"diff_note": "kein Handwerk, aber 2,5 h schmoren — Geduld statt Technik",
|
"diff_note": "kein Handwerk, aber 2,5 h schmoren — Geduld statt Technik",
|
||||||
"id": "steirisches-wurzelfleisch"
|
"id": "steirisches-wurzelfleisch",
|
||||||
|
"heimat": "oesterreich"
|
||||||
},
|
},
|
||||||
"vorarlberger-kaesespaetzle": {
|
"vorarlberger-kaesespaetzle": {
|
||||||
"name": "Vorarlberger Käsespätzle (Käsknöpfle)",
|
"name": "Vorarlberger Käsespätzle (Käsknöpfle)",
|
||||||
@@ -228,7 +234,11 @@
|
|||||||
},
|
},
|
||||||
"fact": "Im Bregenzerwald gehört es zur Tradition, dass die Familie aus EINER großen Pfanne isst — nicht aus einzelnen Tellern. Die Käsknöpfle stehen in der Mitte des Tisches, jeder löffelt sich seinen Teil heraus.",
|
"fact": "Im Bregenzerwald gehört es zur Tradition, dass die Familie aus EINER großen Pfanne isst — nicht aus einzelnen Tellern. Die Käsknöpfle stehen in der Mitte des Tisches, jeder löffelt sich seinen Teil heraus.",
|
||||||
"diff_note": "Spätzlehobel-Geschick + Zwiebeln geduldig rösten",
|
"diff_note": "Spätzlehobel-Geschick + Zwiebeln geduldig rösten",
|
||||||
"id": "vorarlberger-kaesespaetzle"
|
"id": "vorarlberger-kaesespaetzle",
|
||||||
|
"heimat": "oesterreich",
|
||||||
|
"signature": {
|
||||||
|
"mozzarella": "Vorarlberger Bergkäse"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"wachauer-marillenknoedel": {
|
"wachauer-marillenknoedel": {
|
||||||
"name": "Wachauer Marillenknödel",
|
"name": "Wachauer Marillenknödel",
|
||||||
@@ -283,7 +293,8 @@
|
|||||||
},
|
},
|
||||||
"fact": "Die Wachauer Marille hat ein eigenes Fest: das Marillenkirtag in Spitz an der Donau, jeden Juli. Drei Tage Marillen-Knödel, Marillenmarmelade, Marillenbrand.",
|
"fact": "Die Wachauer Marille hat ein eigenes Fest: das Marillenkirtag in Spitz an der Donau, jeden Juli. Drei Tage Marillen-Knödel, Marillenmarmelade, Marillenbrand.",
|
||||||
"diff_note": "Knödel-Formen braucht Gefühl, sonst läuft die Marille beim Kochen aus",
|
"diff_note": "Knödel-Formen braucht Gefühl, sonst läuft die Marille beim Kochen aus",
|
||||||
"id": "wachauer-marillenknoedel"
|
"id": "wachauer-marillenknoedel",
|
||||||
|
"heimat": "oesterreich"
|
||||||
},
|
},
|
||||||
"wiener-schnitzel": {
|
"wiener-schnitzel": {
|
||||||
"name": "Wiener Schnitzel",
|
"name": "Wiener Schnitzel",
|
||||||
@@ -339,7 +350,8 @@
|
|||||||
},
|
},
|
||||||
"fact": "Die Legende sagt, das Wiener Schnitzel sei aus dem Mailänder Cotoletta entstanden, das Feldmarschall Radetzky 1857 nach Wien gebracht haben soll. Historisch nicht belegt — das ‚goldene Backteig-Schnitzel' gibt es in Wien aber spätestens seit 1830.",
|
"fact": "Die Legende sagt, das Wiener Schnitzel sei aus dem Mailänder Cotoletta entstanden, das Feldmarschall Radetzky 1857 nach Wien gebracht haben soll. Historisch nicht belegt — das ‚goldene Backteig-Schnitzel' gibt es in Wien aber spätestens seit 1830.",
|
||||||
"diff_note": "Panieren in 3 Schritten + 170 °C Öl treffen — Aufmerksamkeit, nicht Können",
|
"diff_note": "Panieren in 3 Schritten + 170 °C Öl treffen — Aufmerksamkeit, nicht Können",
|
||||||
"id": "wiener-schnitzel"
|
"id": "wiener-schnitzel",
|
||||||
|
"heimat": "oesterreich"
|
||||||
},
|
},
|
||||||
"sachertorte": {
|
"sachertorte": {
|
||||||
"name": "Sachertorte",
|
"name": "Sachertorte",
|
||||||
@@ -396,7 +408,8 @@
|
|||||||
},
|
},
|
||||||
"fact": "Franz Sacher erfand das Rezept 1832 mit 16 Jahren als Lehrling für Fürst Metternich. Den Streit, ob die Marillenmarmelade in der Mitte ODER nur außen sein darf, haben Sacher und Demel über 30 Jahre lang vor Gericht geführt — verloren hat keiner: heute gibt es beide ‚Originale'.",
|
"fact": "Franz Sacher erfand das Rezept 1832 mit 16 Jahren als Lehrling für Fürst Metternich. Den Streit, ob die Marillenmarmelade in der Mitte ODER nur außen sein darf, haben Sacher und Demel über 30 Jahre lang vor Gericht geführt — verloren hat keiner: heute gibt es beide ‚Originale'.",
|
||||||
"diff_note": "echtes Konditor-Handwerk — Eiklarschnee, Glasur in einem Schwall, kein Streichen",
|
"diff_note": "echtes Konditor-Handwerk — Eiklarschnee, Glasur in einem Schwall, kein Streichen",
|
||||||
"id": "sachertorte"
|
"id": "sachertorte",
|
||||||
|
"heimat": "oesterreich"
|
||||||
},
|
},
|
||||||
"apfelstrudel": {
|
"apfelstrudel": {
|
||||||
"name": "Apfelstrudel",
|
"name": "Apfelstrudel",
|
||||||
@@ -456,7 +469,8 @@
|
|||||||
},
|
},
|
||||||
"fact": "Das älteste erhaltene Strudelteig-Rezept liegt in der Wiener Nationalbibliothek von 1696. Der ‚Apfelstrudel' hat sich aus dem türkischen ‚Baklava' entwickelt — als Wien zwischen 1529 und 1683 zweimal von Osmanen belagert wurde, blieb mehr als nur Krieg zurück.",
|
"fact": "Das älteste erhaltene Strudelteig-Rezept liegt in der Wiener Nationalbibliothek von 1696. Der ‚Apfelstrudel' hat sich aus dem türkischen ‚Baklava' entwickelt — als Wien zwischen 1529 und 1683 zweimal von Osmanen belagert wurde, blieb mehr als nur Krieg zurück.",
|
||||||
"diff_note": "Strudelteig hauchdünn ziehen ist das ganze Geheimnis — viel Übungssache",
|
"diff_note": "Strudelteig hauchdünn ziehen ist das ganze Geheimnis — viel Übungssache",
|
||||||
"id": "apfelstrudel"
|
"id": "apfelstrudel",
|
||||||
|
"heimat": "oesterreich"
|
||||||
},
|
},
|
||||||
"topfengolatschen": {
|
"topfengolatschen": {
|
||||||
"name": "Topfengolatsche",
|
"name": "Topfengolatsche",
|
||||||
@@ -512,7 +526,8 @@
|
|||||||
},
|
},
|
||||||
"fact": "Die Topfengolatsche ist Kaffeehaus-Klassiker seit den 1880er-Jahren. ‚Koláč' bedeutet im Tschechischen einfach ‚Kuchen' — das ist ein typisches Wiener Lehnwort aus der Habsburger-Zeit, als die böhmische Küche in jeder Kaffeehausvitrine lag.",
|
"fact": "Die Topfengolatsche ist Kaffeehaus-Klassiker seit den 1880er-Jahren. ‚Koláč' bedeutet im Tschechischen einfach ‚Kuchen' — das ist ein typisches Wiener Lehnwort aus der Habsburger-Zeit, als die böhmische Küche in jeder Kaffeehausvitrine lag.",
|
||||||
"diff_note": "TK-Plunderteig nimmt die Arbeit ab, Fülle ist easy",
|
"diff_note": "TK-Plunderteig nimmt die Arbeit ab, Fülle ist easy",
|
||||||
"id": "topfengolatschen"
|
"id": "topfengolatschen",
|
||||||
|
"heimat": "oesterreich"
|
||||||
},
|
},
|
||||||
"bayerische-brezel": {
|
"bayerische-brezel": {
|
||||||
"name": "Bayerische Brezel mit Obatzda",
|
"name": "Bayerische Brezel mit Obatzda",
|
||||||
@@ -572,7 +587,8 @@
|
|||||||
},
|
},
|
||||||
"fact": "Die Brezel-Form wurde 1839 angeblich vom Münchner Bäckergeselle Anton Nepomuk Pfannenbrenner erfunden — er verwechselte aus Versehen Zuckerwasser mit Natronlauge zum Bestreichen. Das ‚Versehen' wurde zum Welthit.",
|
"fact": "Die Brezel-Form wurde 1839 angeblich vom Münchner Bäckergeselle Anton Nepomuk Pfannenbrenner erfunden — er verwechselte aus Versehen Zuckerwasser mit Natronlauge zum Bestreichen. Das ‚Versehen' wurde zum Welthit.",
|
||||||
"diff_note": "Vorsicht mit Lauge (NaOH ist ätzend!) + Brezel-Schlinge braucht Übung",
|
"diff_note": "Vorsicht mit Lauge (NaOH ist ätzend!) + Brezel-Schlinge braucht Übung",
|
||||||
"id": "bayerische-brezel"
|
"id": "bayerische-brezel",
|
||||||
|
"heimat": "deutschland"
|
||||||
},
|
},
|
||||||
"schwaebische-maultaschen": {
|
"schwaebische-maultaschen": {
|
||||||
"name": "Schwäbische Maultaschen",
|
"name": "Schwäbische Maultaschen",
|
||||||
@@ -630,7 +646,8 @@
|
|||||||
},
|
},
|
||||||
"fact": "Die Legende der ‚Herrgottsbescheißerle': Im Kloster Maulbronn wollten die Mönche in der Fastenzeit nicht auf Fleisch verzichten. Sie versteckten es im Spinat-Brät der Teigtasche — der Herrgott sieht's nicht durch den Teig. Aus ‚Maulbronn' wurde ‚Maultasche'.",
|
"fact": "Die Legende der ‚Herrgottsbescheißerle': Im Kloster Maulbronn wollten die Mönche in der Fastenzeit nicht auf Fleisch verzichten. Sie versteckten es im Spinat-Brät der Teigtasche — der Herrgott sieht's nicht durch den Teig. Aus ‚Maulbronn' wurde ‚Maultasche'.",
|
||||||
"diff_note": "Pasta selbst gemacht UND gefüllt — Geduld und Geschicklichkeit",
|
"diff_note": "Pasta selbst gemacht UND gefüllt — Geduld und Geschicklichkeit",
|
||||||
"id": "schwaebische-maultaschen"
|
"id": "schwaebische-maultaschen",
|
||||||
|
"heimat": "deutschland"
|
||||||
},
|
},
|
||||||
"rheinischer-sauerbraten": {
|
"rheinischer-sauerbraten": {
|
||||||
"name": "Rheinischer Sauerbraten",
|
"name": "Rheinischer Sauerbraten",
|
||||||
@@ -691,7 +708,8 @@
|
|||||||
},
|
},
|
||||||
"fact": "Im Rheinland wurde der Sauerbraten ursprünglich aus Pferdefleisch gemacht — weil Pferde nach 1834 (Ende der Pferde-Kutschen) auf den Bauernhöfen nutzlos wurden. Heute ist Rind Standard, aber in alten Köln-Rezepten steht noch ‚Hottebrater'.",
|
"fact": "Im Rheinland wurde der Sauerbraten ursprünglich aus Pferdefleisch gemacht — weil Pferde nach 1834 (Ende der Pferde-Kutschen) auf den Bauernhöfen nutzlos wurden. Heute ist Rind Standard, aber in alten Köln-Rezepten steht noch ‚Hottebrater'.",
|
||||||
"diff_note": "3 Tage vorher in Marinade einlegen + 2,5 h schmoren — Marathon, aber simpel",
|
"diff_note": "3 Tage vorher in Marinade einlegen + 2,5 h schmoren — Marathon, aber simpel",
|
||||||
"id": "rheinischer-sauerbraten"
|
"id": "rheinischer-sauerbraten",
|
||||||
|
"heimat": "deutschland"
|
||||||
},
|
},
|
||||||
"schwarzwaelder-kirschtorte": {
|
"schwarzwaelder-kirschtorte": {
|
||||||
"name": "Schwarzwälder Kirschtorte",
|
"name": "Schwarzwälder Kirschtorte",
|
||||||
@@ -746,7 +764,8 @@
|
|||||||
},
|
},
|
||||||
"fact": "Die Schwarzwälder Kirschtorte heißt nicht nach dem Schwarzwald, sondern nach der schwarzen Tracht des Schwarzwald-Brauchs: schwarze Schokoraspeln (= Tracht), weiße Sahne (= Schürze), rote Kirschen (= Bollenhut der Frauen).",
|
"fact": "Die Schwarzwälder Kirschtorte heißt nicht nach dem Schwarzwald, sondern nach der schwarzen Tracht des Schwarzwald-Brauchs: schwarze Schokoraspeln (= Tracht), weiße Sahne (= Schürze), rote Kirschen (= Bollenhut der Frauen).",
|
||||||
"diff_note": "Konditor-Klassiker: Biskuit, Kirschen, Sahne, Schoko — viele Schritte",
|
"diff_note": "Konditor-Klassiker: Biskuit, Kirschen, Sahne, Schoko — viele Schritte",
|
||||||
"id": "schwarzwaelder-kirschtorte"
|
"id": "schwarzwaelder-kirschtorte",
|
||||||
|
"heimat": "deutschland"
|
||||||
},
|
},
|
||||||
"schweizer-kaesefondue": {
|
"schweizer-kaesefondue": {
|
||||||
"name": "Schweizer Käsefondue",
|
"name": "Schweizer Käsefondue",
|
||||||
@@ -800,7 +819,11 @@
|
|||||||
},
|
},
|
||||||
"fact": "Das ‚Schweizer Nationalgericht' Fondue ist eine Erfindung der 1930er Schweizer Käse-Union — als Marketing für die hohen Käse-Überschüsse während der Wirtschaftskrise. Vor 1930 war Fondue nur eine regionale Spezialität der West-Schweiz.",
|
"fact": "Das ‚Schweizer Nationalgericht' Fondue ist eine Erfindung der 1930er Schweizer Käse-Union — als Marketing für die hohen Käse-Überschüsse während der Wirtschaftskrise. Vor 1930 war Fondue nur eine regionale Spezialität der West-Schweiz.",
|
||||||
"diff_note": "Käse-Verhältnis + Achter-Rührtechnik (nie Kreis) — Detail entscheidet",
|
"diff_note": "Käse-Verhältnis + Achter-Rührtechnik (nie Kreis) — Detail entscheidet",
|
||||||
"id": "schweizer-kaesefondue"
|
"id": "schweizer-kaesefondue",
|
||||||
|
"heimat": "schweiz",
|
||||||
|
"signature": {
|
||||||
|
"mozzarella": "Schweizer Bergkäse"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"zuercher-geschnetzeltes": {
|
"zuercher-geschnetzeltes": {
|
||||||
"name": "Zürcher Geschnetzeltes mit Rösti",
|
"name": "Zürcher Geschnetzeltes mit Rösti",
|
||||||
@@ -859,7 +882,8 @@
|
|||||||
},
|
},
|
||||||
"fact": "Die Sauce des Original-Zürcher-Geschnetzelten hat ursprünglich KEINE Champignons enthalten. Diese kamen erst in den 1940er Jahren dazu — und sind heute aus dem Klassiker nicht mehr wegzudenken. Den genauen Erfinder gibt's nicht.",
|
"fact": "Die Sauce des Original-Zürcher-Geschnetzelten hat ursprünglich KEINE Champignons enthalten. Diese kamen erst in den 1940er Jahren dazu — und sind heute aus dem Klassiker nicht mehr wegzudenken. Den genauen Erfinder gibt's nicht.",
|
||||||
"diff_note": "Rösti-Wenden mit dem Teller ist die Kunst — sonst alles geradeaus",
|
"diff_note": "Rösti-Wenden mit dem Teller ist die Kunst — sonst alles geradeaus",
|
||||||
"id": "zuercher-geschnetzeltes"
|
"id": "zuercher-geschnetzeltes",
|
||||||
|
"heimat": "schweiz"
|
||||||
},
|
},
|
||||||
"pizza-margherita": {
|
"pizza-margherita": {
|
||||||
"name": "Pizza Margherita",
|
"name": "Pizza Margherita",
|
||||||
@@ -914,7 +938,8 @@
|
|||||||
},
|
},
|
||||||
"fact": "Pizza Margherita wurde laut Legende 1889 für Königin Margherita gebacken: Mozzarella (weiß), Tomate (rot), Basilikum (grün) — die Farben der italienischen Flagge. Der Pizzaiolo Raffaele Esposito wollte der Monarchin huldigen.",
|
"fact": "Pizza Margherita wurde laut Legende 1889 für Königin Margherita gebacken: Mozzarella (weiß), Tomate (rot), Basilikum (grün) — die Farben der italienischen Flagge. Der Pizzaiolo Raffaele Esposito wollte der Monarchin huldigen.",
|
||||||
"diff_note": "24 h Teigreife planen + Backofen auf Maximum — Vorbereitung statt Technik",
|
"diff_note": "24 h Teigreife planen + Backofen auf Maximum — Vorbereitung statt Technik",
|
||||||
"id": "pizza-margherita"
|
"id": "pizza-margherita",
|
||||||
|
"heimat": "italien"
|
||||||
},
|
},
|
||||||
"spaghetti-carbonara": {
|
"spaghetti-carbonara": {
|
||||||
"name": "Spaghetti Carbonara",
|
"name": "Spaghetti Carbonara",
|
||||||
@@ -968,7 +993,11 @@
|
|||||||
},
|
},
|
||||||
"fact": "Spaghetti Carbonara ist erst nach dem Zweiten Weltkrieg dokumentiert (erstes Rezept 1944). Eine Theorie: US-Soldaten in Rom verlangten Bacon & Eggs, die Köche servierten es als Pasta-Variante. Italienische Köche bestreiten das.",
|
"fact": "Spaghetti Carbonara ist erst nach dem Zweiten Weltkrieg dokumentiert (erstes Rezept 1944). Eine Theorie: US-Soldaten in Rom verlangten Bacon & Eggs, die Köche servierten es als Pasta-Variante. Italienische Köche bestreiten das.",
|
||||||
"diff_note": "Pfanne vom Herd nehmen, BEVOR die Eier reinkommen — sonst Rührei!",
|
"diff_note": "Pfanne vom Herd nehmen, BEVOR die Eier reinkommen — sonst Rührei!",
|
||||||
"id": "spaghetti-carbonara"
|
"id": "spaghetti-carbonara",
|
||||||
|
"heimat": "italien",
|
||||||
|
"signature": {
|
||||||
|
"speck": "Guanciale (italienischer Speck)"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"paella-valenciana": {
|
"paella-valenciana": {
|
||||||
"name": "Paella Valenciana",
|
"name": "Paella Valenciana",
|
||||||
@@ -1027,7 +1056,8 @@
|
|||||||
},
|
},
|
||||||
"fact": "‚Echte' Paella Valenciana hat 10 Zutaten — die Valencianer haben sie sogar offiziell festgelegt (‚Wikipaella'-Initiative). Was sonst Paella heißt — mit Fisch, Chorizo, Erbsen, Zitrone — ist für sie ‚Touristenbetrug'.",
|
"fact": "‚Echte' Paella Valenciana hat 10 Zutaten — die Valencianer haben sie sogar offiziell festgelegt (‚Wikipaella'-Initiative). Was sonst Paella heißt — mit Fisch, Chorizo, Erbsen, Zitrone — ist für sie ‚Touristenbetrug'.",
|
||||||
"diff_note": "große Pfanne nötig, niemals umrühren, Socarrat-Kruste am Ende ist Kunst",
|
"diff_note": "große Pfanne nötig, niemals umrühren, Socarrat-Kruste am Ende ist Kunst",
|
||||||
"id": "paella-valenciana"
|
"id": "paella-valenciana",
|
||||||
|
"heimat": "spanien"
|
||||||
},
|
},
|
||||||
"tortilla-espanola": {
|
"tortilla-espanola": {
|
||||||
"name": "Tortilla Española",
|
"name": "Tortilla Española",
|
||||||
@@ -1082,7 +1112,8 @@
|
|||||||
},
|
},
|
||||||
"fact": "Die Tortilla Española entstand im 19. Jh. als Arbeiteressen in Nordspanien — günstig, sättigend, kalt essbar. Heute ist sie das Symbol-Tapas-Gericht der spanischen Bars.",
|
"fact": "Die Tortilla Española entstand im 19. Jh. als Arbeiteressen in Nordspanien — günstig, sättigend, kalt essbar. Heute ist sie das Symbol-Tapas-Gericht der spanischen Bars.",
|
||||||
"diff_note": "Konfieren + Wenden mit Teller — sieht spektakulär aus, ist nur Geduld",
|
"diff_note": "Konfieren + Wenden mit Teller — sieht spektakulär aus, ist nur Geduld",
|
||||||
"id": "tortilla-espanola"
|
"id": "tortilla-espanola",
|
||||||
|
"heimat": "spanien"
|
||||||
},
|
},
|
||||||
"ratatouille": {
|
"ratatouille": {
|
||||||
"name": "Ratatouille Niçoise",
|
"name": "Ratatouille Niçoise",
|
||||||
@@ -1137,7 +1168,8 @@
|
|||||||
},
|
},
|
||||||
"fact": "Bis ins 19. Jh. war Ratatouille ein ‚Armeleute-Essen' aus Resten — heute Sterneküche. Der Pixar-Animationsfilm von 2007 hat das Gericht weltberühmt gemacht.",
|
"fact": "Bis ins 19. Jh. war Ratatouille ein ‚Armeleute-Essen' aus Resten — heute Sterneküche. Der Pixar-Animationsfilm von 2007 hat das Gericht weltberühmt gemacht.",
|
||||||
"diff_note": "jedes Gemüse separat anbraten ist mühsam, aber technisch simpel",
|
"diff_note": "jedes Gemüse separat anbraten ist mühsam, aber technisch simpel",
|
||||||
"id": "ratatouille"
|
"id": "ratatouille",
|
||||||
|
"heimat": "frankreich"
|
||||||
},
|
},
|
||||||
"quiche-lorraine": {
|
"quiche-lorraine": {
|
||||||
"name": "Quiche Lorraine",
|
"name": "Quiche Lorraine",
|
||||||
@@ -1192,7 +1224,11 @@
|
|||||||
},
|
},
|
||||||
"fact": "‚Quiche Lorraine' wurde im 16. Jh. erstmals erwähnt. Das Wort ‚Quiche' stammt vom deutschen ‚Kuchen' — Lothringen war damals teils deutschsprachig. Die kulturelle Mischung steht im Teig.",
|
"fact": "‚Quiche Lorraine' wurde im 16. Jh. erstmals erwähnt. Das Wort ‚Quiche' stammt vom deutschen ‚Kuchen' — Lothringen war damals teils deutschsprachig. Die kulturelle Mischung steht im Teig.",
|
||||||
"diff_note": "Mürbteig kalt halten + blind backen — zwei Standardtechniken",
|
"diff_note": "Mürbteig kalt halten + blind backen — zwei Standardtechniken",
|
||||||
"id": "quiche-lorraine"
|
"id": "quiche-lorraine",
|
||||||
|
"heimat": "frankreich",
|
||||||
|
"signature": {
|
||||||
|
"speck-lorraine": "Lardons (französischer Speck)"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"moussaka": {
|
"moussaka": {
|
||||||
"name": "Moussaka",
|
"name": "Moussaka",
|
||||||
@@ -1258,7 +1294,8 @@
|
|||||||
},
|
},
|
||||||
"fact": "Die heutige Moussaka mit Béchamel ist eine Erfindung des griechischen Kochs Nikolaos Tselementes (1878–1958), der die griechische Küche im 1920er-Jahre nach französischen Vorbildern modernisierte. Vor ihm gab's Moussaka ohne die weiße Sauce.",
|
"fact": "Die heutige Moussaka mit Béchamel ist eine Erfindung des griechischen Kochs Nikolaos Tselementes (1878–1958), der die griechische Küche im 1920er-Jahre nach französischen Vorbildern modernisierte. Vor ihm gab's Moussaka ohne die weiße Sauce.",
|
||||||
"diff_note": "drei Komponenten (Aubergine, Ragout, Béchamel) + langes Backen — Marathon",
|
"diff_note": "drei Komponenten (Aubergine, Ragout, Béchamel) + langes Backen — Marathon",
|
||||||
"id": "moussaka"
|
"id": "moussaka",
|
||||||
|
"heimat": "griechenland"
|
||||||
},
|
},
|
||||||
"kanelbulle": {
|
"kanelbulle": {
|
||||||
"name": "Kanelbulle (Zimtschnecke)",
|
"name": "Kanelbulle (Zimtschnecke)",
|
||||||
@@ -1317,7 +1354,8 @@
|
|||||||
},
|
},
|
||||||
"fact": "In Schweden gibt's seit 1999 den ‚Kanelbullens dag' am 4. Oktober — ein Feiertag für die Zimtschnecke. Die Heimbäcker-Industrie war damals besorgt, dass jüngere Schweden weniger backen. Heute werden zu diesem Tag mehrere Millionen Kanelbullar verkauft.",
|
"fact": "In Schweden gibt's seit 1999 den ‚Kanelbullens dag' am 4. Oktober — ein Feiertag für die Zimtschnecke. Die Heimbäcker-Industrie war damals besorgt, dass jüngere Schweden weniger backen. Heute werden zu diesem Tag mehrere Millionen Kanelbullar verkauft.",
|
||||||
"diff_note": "Hefeteig braucht Zeit, Wickel-Schneide-Technik ist easy",
|
"diff_note": "Hefeteig braucht Zeit, Wickel-Schneide-Technik ist easy",
|
||||||
"id": "kanelbulle"
|
"id": "kanelbulle",
|
||||||
|
"heimat": "schweden"
|
||||||
},
|
},
|
||||||
"pierogi-ruskie": {
|
"pierogi-ruskie": {
|
||||||
"name": "Pierogi Ruskie (Teigtaschen)",
|
"name": "Pierogi Ruskie (Teigtaschen)",
|
||||||
@@ -1375,7 +1413,8 @@
|
|||||||
},
|
},
|
||||||
"fact": "Pierogi sind nicht ‚russisch'! Der Name ‚Ruskie' bezieht sich auf die Kiewer Rus' — eine slawische Hochkultur des 9.–13. Jh. Heute ist es das polnische Nationalgericht. Streit über das ‚richtige' Rezept tobt zwischen Polen und Ukraine bis heute.",
|
"fact": "Pierogi sind nicht ‚russisch'! Der Name ‚Ruskie' bezieht sich auf die Kiewer Rus' — eine slawische Hochkultur des 9.–13. Jh. Heute ist es das polnische Nationalgericht. Streit über das ‚richtige' Rezept tobt zwischen Polen und Ukraine bis heute.",
|
||||||
"diff_note": "Teigtaschen formen wie Kasnudeln — Geduld und ein flaches Werkzeug",
|
"diff_note": "Teigtaschen formen wie Kasnudeln — Geduld und ein flaches Werkzeug",
|
||||||
"id": "pierogi-ruskie"
|
"id": "pierogi-ruskie",
|
||||||
|
"heimat": "polen"
|
||||||
},
|
},
|
||||||
"gulasch": {
|
"gulasch": {
|
||||||
"name": "Ungarisches Gulasch (Gulyás)",
|
"name": "Ungarisches Gulasch (Gulyás)",
|
||||||
@@ -1436,7 +1475,8 @@
|
|||||||
},
|
},
|
||||||
"fact": "Das ungarische Original ‚Gulyás' ist eine SUPPE — was wir in Mitteleuropa als Gulasch kennen (sämig, kurz), heißt in Ungarn ‚Pörkölt'. Echtes Wiener Saftgulasch wäre für Ungarn ein Sub-Variante.",
|
"fact": "Das ungarische Original ‚Gulyás' ist eine SUPPE — was wir in Mitteleuropa als Gulasch kennen (sämig, kurz), heißt in Ungarn ‚Pörkölt'. Echtes Wiener Saftgulasch wäre für Ungarn ein Sub-Variante.",
|
||||||
"diff_note": "Zwiebeln 20 min karamellisieren — wer das aushält, schafft alles",
|
"diff_note": "Zwiebeln 20 min karamellisieren — wer das aushält, schafft alles",
|
||||||
"id": "gulasch"
|
"id": "gulasch",
|
||||||
|
"heimat": "ungarn"
|
||||||
},
|
},
|
||||||
"gemuese-curry": {
|
"gemuese-curry": {
|
||||||
"name": "Gemüse-Curry mit Reis",
|
"name": "Gemüse-Curry mit Reis",
|
||||||
|
|||||||
@@ -984,6 +984,30 @@ function buildTaskFor(ingKey) {
|
|||||||
if (_taskCache[ingKey]) return _taskCache[ingKey];
|
if (_taskCache[ingKey]) return _taskCache[ingKey];
|
||||||
const ing = ING[ingKey];
|
const ing = ING[ingKey];
|
||||||
if (!ing) return null;
|
if (!ing) return null;
|
||||||
|
// HEIMAT-REGEL: In einem regionalen Gericht kommt jede Zutat, die das
|
||||||
|
// Herkunftsland selbst erzeugt, von dort — logisch nachvollziehbar (ein
|
||||||
|
// Tiroler Gröstl nutzt Tiroler Speck, Tiroler Kartoffeln …). Der Test
|
||||||
|
// „erzeugt das Heimatland diese Zutat?" filtert automatisch: Österreich
|
||||||
|
// baut Kartoffeln an (→ Österreich), aber keinen Pfeffer und kein Olivenöl
|
||||||
|
// (→ dort greift die normale Welt-Logik weiter unten). Kein Länder-Bias,
|
||||||
|
// weil die Antwort am Gericht hängt, nicht am Standort der App.
|
||||||
|
const _hDish = current && current.dish;
|
||||||
|
const heimat = _hDish && _hDish.heimat;
|
||||||
|
if (heimat && C[heimat] && ing.producers && ing.producers[heimat]) {
|
||||||
|
const correct = [heimat];
|
||||||
|
const others = Object.entries(ing.producers)
|
||||||
|
.filter(([c]) => C[c] && c !== heimat)
|
||||||
|
.sort((a, b) => (b[1].t || 0) - (a[1].t || 0))
|
||||||
|
.map(([c]) => c);
|
||||||
|
const climatePossible = (ing.climate_possible || []).filter(c => C[c] && c !== heimat);
|
||||||
|
const distr = others.slice(0, 3);
|
||||||
|
if (climatePossible.length && distr.length < 3) distr.push(climatePossible[0]);
|
||||||
|
const choices = [...correct, ...distr];
|
||||||
|
shuffleInPlace(choices);
|
||||||
|
const label = (_hDish.signature && _hDish.signature[ingKey]) || null;
|
||||||
|
_taskCache[ingKey] = { correct, choices, possible: new Set(), signature: true, heimat, label };
|
||||||
|
return _taskCache[ingKey];
|
||||||
|
}
|
||||||
// Alle Producer (für Klassifizierung) und EU-relevante separat (für Korrekt-Auswahl).
|
// Alle Producer (für Klassifizierung) und EU-relevante separat (für Korrekt-Auswahl).
|
||||||
// Eigenkonsum-Riesen (Indien-Bananen, USA-Zitronen etc.) sind zwar echte Produzenten,
|
// Eigenkonsum-Riesen (Indien-Bananen, USA-Zitronen etc.) sind zwar echte Produzenten,
|
||||||
// landen aber nicht in unseren Supermärkten — also nicht als „Spiel-Slot-Korrekt" ziehen.
|
// landen aber nicht in unseren Supermärkten — also nicht als „Spiel-Slot-Korrekt" ziehen.
|
||||||
@@ -1109,8 +1133,13 @@ function loadIngredient(){
|
|||||||
const task = buildTaskFor(ingKey);
|
const task = buildTaskFor(ingKey);
|
||||||
current.found=[]; current.wrongHere=0; current.wrongStreak=0; current.attempted=new Set();
|
current.found=[]; current.wrongHere=0; current.wrongStreak=0; current.attempted=new Set();
|
||||||
const two = task && task.correct.length > 1;
|
const two = task && task.correct.length > 1;
|
||||||
|
const frage = two
|
||||||
|
? 'finde die <b>zwei</b> Herkunftsländer aus dieser Auswahl'
|
||||||
|
: (task && task.signature
|
||||||
|
? 'aus welchem Land stammt diese Zutat in <b>diesem Gericht</b>?'
|
||||||
|
: 'aus welchem Land kommt diese Zutat häufig zu uns auf den Markt?');
|
||||||
document.getElementById('taskBanner').innerHTML=
|
document.getElementById('taskBanner').innerHTML=
|
||||||
`🔎 Suche: <b>${ing.nm}</b> – ${two?'finde die <b>zwei</b> Herkunftsländer aus dieser Auswahl':'aus welchem Land kommt diese Zutat häufig zu uns auf den Markt?'}`;
|
`🔎 Suche: <b>${ing.nm}</b> – ${frage}`;
|
||||||
document.getElementById('resultCard').className="result-card";
|
document.getElementById('resultCard').className="result-card";
|
||||||
drawMarkers(ing); renderIngList();
|
drawMarkers(ing); renderIngList();
|
||||||
}
|
}
|
||||||
@@ -1194,9 +1223,18 @@ function producerEconHTML(ingKey, correctKeys) {
|
|||||||
if (!ing || !ing.producers) return '';
|
if (!ing || !ing.producers) return '';
|
||||||
const all = Object.entries(ing.producers).filter(([c]) => C[c]);
|
const all = Object.entries(ing.producers).filter(([c]) => C[c]);
|
||||||
all.sort((a,b) => (b[1].t||0) - (a[1].t||0));
|
all.sort((a,b) => (b[1].t||0) - (a[1].t||0));
|
||||||
const top5 = all.slice(0, 5);
|
const shown = all.slice(0, 5);
|
||||||
let html = '<div class="econ-list"><div class="rlabel">Weltweite Hauptproduzenten</div>';
|
// Richtige Antwort(en) immer zeigen — auch wenn das Heimatland kein Top-5-Produzent ist
|
||||||
top5.forEach(([c, info]) => {
|
correctKeys.forEach(ck => {
|
||||||
|
if (!shown.some(([c]) => c === ck)) {
|
||||||
|
const row = all.find(([c]) => c === ck);
|
||||||
|
if (row) shown.push(row);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const sig = _taskCache[ingKey] && _taskCache[ingKey].signature;
|
||||||
|
let html = '<div class="econ-list"><div class="rlabel">' +
|
||||||
|
(sig ? 'Die größten Produzenten – zum Vergleich' : 'Weltweite Hauptproduzenten') + '</div>';
|
||||||
|
shown.forEach(([c, info]) => {
|
||||||
const isMatch = correctKeys.includes(c);
|
const isMatch = correctKeys.includes(c);
|
||||||
const cm = C[c];
|
const cm = C[c];
|
||||||
const amount = info.t ? fmtTonnes(info.t) : (info.note || 'kulturell verbreitet');
|
const amount = info.t ? fmtTonnes(info.t) : (info.note || 'kulturell verbreitet');
|
||||||
@@ -1207,8 +1245,12 @@ function producerEconHTML(ingKey, correctKeys) {
|
|||||||
<span class="prod-val">${amount}${share}</span>
|
<span class="prod-val">${amount}${share}</span>
|
||||||
</div>`;
|
</div>`;
|
||||||
});
|
});
|
||||||
if (all.length > 5) {
|
const rest = all.length - shown.length;
|
||||||
html += `<div class="prod-more">+ ${all.length - 5} weitere Länder</div>`;
|
if (rest > 0) {
|
||||||
|
html += `<div class="prod-more">+ ${rest} weitere Länder</div>`;
|
||||||
|
}
|
||||||
|
if (sig) {
|
||||||
|
html += `<div class="prod-more" style="color:#4a7c4e;font-weight:600">Der größte Produzent ist nicht automatisch die Antwort – hier zählt, woher die Zutat für dieses Gericht kommt.</div>`;
|
||||||
}
|
}
|
||||||
html += '</div>';
|
html += '</div>';
|
||||||
return html;
|
return html;
|
||||||
@@ -1226,6 +1268,19 @@ function explainChoice(ingKey, key, isCorrect){
|
|||||||
const info = ing && ing.producers && ing.producers[key];
|
const info = ing && ing.producers && ing.producers[key];
|
||||||
const amount = info && info.t ? fmtTonnes(info.t) : '';
|
const amount = info && info.t ? fmtTonnes(info.t) : '';
|
||||||
const animal = isAnimalIng(ingKey);
|
const animal = isAnimalIng(ingKey);
|
||||||
|
// Signatur-Zutat (Heimat-Regel): Antwort folgt dem Gericht
|
||||||
|
const sTask = _taskCache[ingKey];
|
||||||
|
if (sTask && sTask.signature) {
|
||||||
|
const heimatN = C[sTask.heimat] ? C[sTask.heimat].n : '';
|
||||||
|
const was = sTask.label || ('der/die/das ' + ing.nm);
|
||||||
|
if (isCorrect) {
|
||||||
|
return {cls:'ok', badge:'✓', text:`Dieses Gericht kommt aus <b>${heimatN}</b> – ${was} ist hier heimisch und wird vor Ort erzeugt.`};
|
||||||
|
}
|
||||||
|
if (info) {
|
||||||
|
return {cls:'mid', badge:'⚠️', text:`${C[key].n} erzeugt zwar viel ${ing.nm}${amount?' ('+amount+')':''} – aber in einem Gericht aus ${heimatN} stammt ${was} von dort.`};
|
||||||
|
}
|
||||||
|
// Nicht-Produzent-Fehlklick → normale „unmöglich"-Logik unten
|
||||||
|
}
|
||||||
if (isCorrect){
|
if (isCorrect){
|
||||||
if (info && info.market === 'world-far'){
|
if (info && info.market === 'world-far'){
|
||||||
return {cls:'ok', badge:'✓', text:`<b>Welt-Hauptproduzent</b> (${amount}) — kommt aber selten in den AT-Handel.`};
|
return {cls:'ok', badge:'✓', text:`<b>Welt-Hauptproduzent</b> (${amount}) — kommt aber selten in den AT-Handel.`};
|
||||||
@@ -1322,6 +1377,10 @@ function showSolved(ing,pts,bonus){
|
|||||||
const flags=task.correct.map(k=>C[k].f+' '+C[k].n).join(' & ');
|
const flags=task.correct.map(k=>C[k].f+' '+C[k].n).join(' & ');
|
||||||
card.className="result-card ok show";
|
card.className="result-card ok show";
|
||||||
const factLine = ing.fact ? `<div class="more-line"><b>Wusstest du?</b> ${esc(ing.fact)}</div>` : '';
|
const factLine = ing.fact ? `<div class="more-line"><b>Wusstest du?</b> ${esc(ing.fact)}</div>` : '';
|
||||||
|
// Heimat-Regel: erklären, warum die Region die Antwort ist (nicht der größte Produzent)
|
||||||
|
const sigLine = (task.signature && C[task.heimat])
|
||||||
|
? `<div class="more-line" style="background:#eef5ec;border-left:3px solid #4a7c4e">🍽️ Das ist ein Gericht aus <b>${C[task.heimat].n}</b>. ${task.label ? ('<b>'+task.label+'</b>') : ('Der/die/das '+esc(ing.nm))} kommt von hier – nur Zutaten, die bei uns gar nicht wachsen, reisen von weit her.</div>`
|
||||||
|
: '';
|
||||||
// Caveats für world-far/off-season Korrekt-Picks (pro Land separat)
|
// Caveats für world-far/off-season Korrekt-Picks (pro Land separat)
|
||||||
const caveats = task.correct.map(k => {
|
const caveats = task.correct.map(k => {
|
||||||
const info = ing.producers && ing.producers[k];
|
const info = ing.producers && ing.producers[k];
|
||||||
@@ -1338,6 +1397,7 @@ function showSolved(ing,pts,bonus){
|
|||||||
</div>`;
|
</div>`;
|
||||||
}).filter(Boolean).join('');
|
}).filter(Boolean).join('');
|
||||||
card.innerHTML=`<div class="rc-head">✓ Geschafft! ${esc(ing.nm)} kommt aus: ${flags}</div>
|
card.innerHTML=`<div class="rc-head">✓ Geschafft! ${esc(ing.nm)} kommt aus: ${flags}</div>
|
||||||
|
${sigLine}
|
||||||
${allChoicesHTML(ingKey, task, current.attempted)}
|
${allChoicesHTML(ingKey, task, current.attempted)}
|
||||||
${producerEconHTML(ingKey, task.correct)}
|
${producerEconHTML(ingKey, task.correct)}
|
||||||
${caveats}
|
${caveats}
|
||||||
@@ -1362,6 +1422,18 @@ function showWrong(key, kind, ingKey){
|
|||||||
const c=C[key],card=document.getElementById('resultCard');
|
const c=C[key],card=document.getElementById('resultCard');
|
||||||
const ing = ING[ingKey];
|
const ing = ING[ingKey];
|
||||||
let head, note;
|
let head, note;
|
||||||
|
// Signatur-Zutat: „Warum nicht Deutschland?" sofort beantworten
|
||||||
|
const sTask = _taskCache[ingKey];
|
||||||
|
if (sTask && sTask.signature && ing.producers && ing.producers[key]) {
|
||||||
|
card.className="result-card mid show";
|
||||||
|
const info = ing.producers[key];
|
||||||
|
const amount = info && info.t ? fmtTonnes(info.t) : 'verbreitet';
|
||||||
|
const heimatN = C[sTask.heimat] ? C[sTask.heimat].n : '';
|
||||||
|
const was = sTask.label || ('der/die/das ' + ing.nm);
|
||||||
|
card.innerHTML = `<div class="rc-head">⚠️ ${c.f} ${c.n} erzeugt zwar viel ${ing.nm} (${amount}) – aber dieses Gericht kommt aus ${heimatN}, und ${was} stammt von dort.</div>`+
|
||||||
|
`<div class="note">${c.info}<br><br>🔎 Tipp: Achte auf den Namen des Gerichts – er verrät oft die Herkunft.</div>`;
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (kind === 'producer-eu-elsewhere') {
|
if (kind === 'producer-eu-elsewhere') {
|
||||||
card.className="result-card mid show";
|
card.className="result-card mid show";
|
||||||
const info = ing.producers[key];
|
const info = ing.producers[key];
|
||||||
|
|||||||
Reference in New Issue
Block a user