<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://www.muenster4you.de/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=T0mch3n</id>
	<title>MediaWiki - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://www.muenster4you.de/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=T0mch3n"/>
	<link rel="alternate" type="text/html" href="https://www.muenster4you.de/wiki/Spezial:Beitr%C3%A4ge/T0mch3n"/>
	<updated>2026-05-27T20:24:59Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Project:Impressum&amp;diff=1128</id>
		<title>Project:Impressum</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Project:Impressum&amp;diff=1128"/>
		<updated>2026-05-18T13:38:50Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Diese Webpräsenz wird angeboten durch&lt;br /&gt;
&lt;br /&gt;
    Code für Münster&lt;br /&gt;
    https://codeformuenster.org/&lt;br /&gt;
    Deutschland&lt;br /&gt;
&lt;br /&gt;
== Nutzungsbedingungen ==&lt;br /&gt;
&lt;br /&gt;
Jeder Benutzer ist für seine Beiträge selbst verantwortlich. Jeder Inhalt, der von einem Nutzer erstellt wurde, kann von jedem verändert werden. Das gilt nicht für die Inhalte der Hauptseite, die von den Verantwortlichen geändert werden dürfen. Werke, die angeblich die Rechte anderer verletzen, können direkt und ohne Rücksprache korrigiert oder gelöscht werden. Der Anbieter kann einzelne Benutzer_innen ausschließen. Wer Dateien hochlädt, ist dafür verantwortlich. Administratoren können diese Daten jederzeit löschen, ohne dazu etwas zu erklären.&lt;br /&gt;
&lt;br /&gt;
Die Benutzer sollen alle Inhalte, die sie zu dieser Webseite beitragen, so gut wie möglich erstellen. Der Anbieter und die einzelnen Benutzer garantieren nicht für Vollständigkeit, Aktualität, Qualität und Richtigkeit. Wir sind nicht verantwortlich für Schäden, die durch Vertrauen auf die Inhalte dieser Webpräsenz oder deren Gebrauch entstehen.&lt;br /&gt;
&lt;br /&gt;
Der Anbieter erlaubt die Weitergabe der Daten in diesem Wiki, aber nur unter bestimmten Bedingungen.&lt;br /&gt;
&lt;br /&gt;
== Hinweis an Rechteinhaber ==&lt;br /&gt;
&lt;br /&gt;
Der Anbieter weist auf allen Eingabeseiten darauf hin, kein Material zu verwenden, das Urheberrechten Dritter unterliegt. Es gibt sehr viele deutsche elektronische und schriftliche Publikationen. Es kann trotzdem passieren, dass Benutzer Material einbringen, das bestehende Schutzrechte verletzt. Das wird dann aber nicht sofort erkannt.&lt;br /&gt;
&lt;br /&gt;
Wenn dem Anbieter eine Urheberrechtsverletzung angezeigt wird, wird das Material vom Server genommen.&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Location&amp;diff=1127</id>
		<title>Location</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Location&amp;diff=1127"/>
		<updated>2026-05-18T13:13:15Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: /* Spannende Plätze */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Spannende Plätze==&lt;br /&gt;
In Münster gibt es viel zu entdecken, auch wenn man schon länger hier wohnt! Stöber hier um mehr zu erfahren.&lt;br /&gt;
&lt;br /&gt;
#[https://gazometer.space/ Gasometer]&lt;br /&gt;
Der Gasometer in Münster ist ein stillgelegter Erdgasspeicher der Stadtwerke Münster, der seit 1954 die Silhouette des Stadtbildes Münsters mitprägt und fünf Jahrzehnte ununterbrochen in Betrieb war.&lt;br /&gt;
#[https://www.baumberge-touristik.de/ Baumberge]&lt;br /&gt;
Die Baumberge im nordrhein-westfälischen Kreis Coesfeld sind der höchste Höhenzug des Münsterlandes.&lt;br /&gt;
#[https://rieselfelder-muenster.de/ Rieselfelder] &lt;br /&gt;
Die [https://de.wikipedia.org/wiki/Rieselfelder_M%C3%BCnster Rieselfelder Münster] sind ein Europäisches Vogelschutzgebiet auf dem Gebiet ehemaliger Verrieselungsflächen für die Abwässer der westfälischen Stadt Münster.&lt;br /&gt;
#[https://am-hawerkamp.de/ Hawerkamp]&lt;br /&gt;
Der Hawerkamp als Kulturstandort schreibt seit 30 Jahren seine eigene Geschichte und ist ein Ort des öffentlichen Lebens und Arbeitens. Unsere Heterogenität erzeugt produktive Reibung und gegenseitige Energien und Synergien. Er ist bekannt für Kunstausstellungen, Konzerte, Clubfestivals, Kunstkurse, Theateraufführungen und das jährliche Hawerkamp Festival.&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Location&amp;diff=1126</id>
		<title>Location</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Location&amp;diff=1126"/>
		<updated>2026-05-18T13:04:29Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: /* Spannende Plätze */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Spannende Plätze==&lt;br /&gt;
In Münster gibt es viel zu entdecken, auch wenn man schon länger hier wohnt! Stöber hier um mehr zu erfahren.&lt;br /&gt;
&lt;br /&gt;
#[https://gazometer.space/ Gasometer]&lt;br /&gt;
#[https://www.baumberge-touristik.de/ Baumberge]&lt;br /&gt;
#[https://rieselfelder-muenster.de/ Rieselfelder]&lt;br /&gt;
Die [[Rieselfelder Münster]] sind ein Europäisches Vogelschutzgebiet auf dem Gebiet ehemaliger Verrieselungsflächen für die Abwässer der westfälischen Stadt Münster.&lt;br /&gt;
#[https://am-hawerkamp.de/ Hawerkamp]&lt;br /&gt;
Der Hawerkamp als Kulturstandort schreibt seit 30 Jahren seine eigene Geschichte und ist ein Ort des öffentlichen Lebens und Arbeitens. Unsere Heterogenität erzeugt produktive Reibung und gegenseitige Energien und Synergien. Er ist bekannt für Kunstausstellungen, Konzerte, Clubfestivals, Kunstkurse, Theateraufführungen und das jährliche Hawerkamp Festival.&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Location&amp;diff=1125</id>
		<title>Location</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Location&amp;diff=1125"/>
		<updated>2026-05-18T13:04:00Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Spannende Plätze==&lt;br /&gt;
In Münster gibt es viel zu entdecken, auch wenn man schon länger hier wohnt! Stöber hier um mehr zu erfahren.&lt;br /&gt;
&lt;br /&gt;
#[https://gazometer.space/ Gasometer]&lt;br /&gt;
#[https://www.baumberge-touristik.de/ Baumberge]&lt;br /&gt;
#[https://rieselfelder-muenster.de/ Rieselfelder]&lt;br /&gt;
Die Rieselfelder Münster sind ein Europäisches Vogelschutzgebiet auf dem Gebiet ehemaliger Verrieselungsflächen für die Abwässer der westfälischen Stadt Münster.&lt;br /&gt;
#[https://am-hawerkamp.de/ Hawerkamp]&lt;br /&gt;
Der Hawerkamp als Kulturstandort schreibt seit 30 Jahren seine eigene Geschichte und ist ein Ort des öffentlichen Lebens und Arbeitens. Unsere Heterogenität erzeugt produktive Reibung und gegenseitige Energien und Synergien. Er ist bekannt für Kunstausstellungen, Konzerte, Clubfestivals, Kunstkurse, Theateraufführungen und das jährliche Hawerkamp Festival.&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Freizeit&amp;diff=1124</id>
		<title>Freizeit</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Freizeit&amp;diff=1124"/>
		<updated>2026-05-18T13:01:01Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#widget:StartseitenSuche|arg.foo=bar|arg.bar=oni}} &amp;lt;!-- Suchleiste --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Neues in Münster==&lt;br /&gt;
{{#widget:TeaserFreizeit}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Tennis.png|link=Sport|Sport&lt;br /&gt;
File:Schloss.png|link=Sehenswürdigkeiten|Sehenswürdigkeiten&lt;br /&gt;
File:Location.png|link=Location|Spannende Orte&lt;br /&gt;
File:Ei.png|link=Hofläden|Hofläden&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Consult the [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents User&#039;s Guide] for information on using the wiki software.&lt;br /&gt;
&lt;br /&gt;
== Karte von Münster == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;display_map height=&amp;quot;300px&amp;quot; scrollwheelzoom=&amp;quot;off&amp;quot; service=&amp;quot;leaflet&amp;quot;&amp;gt;&lt;br /&gt;
  Münster, Germany~Die Stadt Münster~Mein schönes Münster~ ~ ~Münster&lt;br /&gt;
  Mauritz-Lindenweg 95, 48145 Münster~Münster 08~Bester Sportverein~ ~ ~Münster 08&lt;br /&gt;
&amp;lt;/display_map&amp;gt;&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Hauptseite&amp;diff=1123</id>
		<title>Hauptseite</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Hauptseite&amp;diff=1123"/>
		<updated>2026-05-18T13:00:08Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: /* Orte von Interesse in Münster */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Willkommen in Münster==&lt;br /&gt;
Münster4you ist eine Plattform, die allen Menschen in Münster ermöglicht, Informationen schnell und unkompliziert abzurufen. Mit der Integration einer künstlichen Intelligenz, ähnlich wie eine Chat-Funktion, können alle Fragen stellen und erhalten Antworten für Münster, gleichzeitig findet sich neues und altbekanntes Wissen strukturiert aufbereitet.&lt;br /&gt;
&lt;br /&gt;
{{#widget:ChatBox}}&lt;br /&gt;
&lt;br /&gt;
== Bereiche dieser Seite ==&lt;br /&gt;
{{#widget:StartseitenBild|bildUrl=/w/images/6/64/Pexels-cottonbro-5137967.jpeg|link=Ankommen|text=Ankommen in Münster}}&lt;br /&gt;
&lt;br /&gt;
{{#widget:StartseitenBild|bildUrl=/w/images/f/f8/Aasee-Herbst-03-Philipp-Foelting-CC-BY-SA.jpg|link=Freizeit|text=Freizeit &amp;amp; Socializing}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
{{#widget:StartseitenBild|bildUrl=/w/images/c/c2/Münster_oben.jpg|link=Stadtteile|text=Stadtteil-Infoseiten}}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Orte von Interesse in Münster == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;display_map height=&amp;quot;300px&amp;quot; scrollwheelzoom=&amp;quot;off&amp;quot; service=&amp;quot;leaflet&amp;quot;&amp;gt;&lt;br /&gt;
  Münster, Germany~Die Stadt Münster~Mein schönes Münster~ ~ ~Münster&lt;br /&gt;
  Mauritz-Lindenweg 95, 48145 Münster~Münster 08~Bester Sportverein~ ~ ~Münster 08&lt;br /&gt;
  Stühmerweg 8, 48147 Münster, Germany~Gesundheitsamt~&lt;br /&gt;
  Hafenstraße 30, 48153 Münster, Germany~Amt für Kinder, Jugend und Familien~&lt;br /&gt;
  Hafenstraße 8, 48153 Münster, Germany~Sozialamt~&lt;br /&gt;
  Alter Steinweg 11, 48143 Münster, ~Stadtbücherei~&lt;br /&gt;
  Annette-Allee 7, 48149 Münster, ~Aassee Naherholungsgebiet~&lt;br /&gt;
&amp;lt;/display_map&amp;gt;&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Hauptseite&amp;diff=1122</id>
		<title>Hauptseite</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Hauptseite&amp;diff=1122"/>
		<updated>2026-05-18T12:59:02Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Willkommen in Münster==&lt;br /&gt;
Münster4you ist eine Plattform, die allen Menschen in Münster ermöglicht, Informationen schnell und unkompliziert abzurufen. Mit der Integration einer künstlichen Intelligenz, ähnlich wie eine Chat-Funktion, können alle Fragen stellen und erhalten Antworten für Münster, gleichzeitig findet sich neues und altbekanntes Wissen strukturiert aufbereitet.&lt;br /&gt;
&lt;br /&gt;
{{#widget:ChatBox}}&lt;br /&gt;
&lt;br /&gt;
== Bereiche dieser Seite ==&lt;br /&gt;
{{#widget:StartseitenBild|bildUrl=/w/images/6/64/Pexels-cottonbro-5137967.jpeg|link=Ankommen|text=Ankommen in Münster}}&lt;br /&gt;
&lt;br /&gt;
{{#widget:StartseitenBild|bildUrl=/w/images/f/f8/Aasee-Herbst-03-Philipp-Foelting-CC-BY-SA.jpg|link=Freizeit|text=Freizeit &amp;amp; Socializing}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
{{#widget:StartseitenBild|bildUrl=/w/images/c/c2/Münster_oben.jpg|link=Stadtteile|text=Stadtteil-Infoseiten}}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Orte von Interesse in Münster == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;display_map height=&amp;quot;300px&amp;quot; scrollwheelzoom=&amp;quot;off&amp;quot; service=&amp;quot;leaflet&amp;quot;&amp;gt;&lt;br /&gt;
  Münster, Germany~Die Stadt Münster~Mein schönes Münster~ ~ ~Münster&lt;br /&gt;
  Mauritz-Lindenweg 95, 48145 Münster~Münster 08~Bester Sportverein~ ~ ~Münster 08&lt;br /&gt;
  Stühmerweg 8, 48147 Münster, Germany~Gesundheitsamt~&lt;br /&gt;
  Hafenstraße 30, 48153 Münster, Germany~Amt für Kinder, Jugend und Familien~&lt;br /&gt;
  Hafenstraße 8, 48153 Münster, Germany~Sozialamt~&lt;br /&gt;
  Alter Steinweg 11, 48143 Münster, ~Stadtbücherei~&lt;br /&gt;
&amp;lt;/display_map&amp;gt;&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Hauptseite&amp;diff=1121</id>
		<title>Hauptseite</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Hauptseite&amp;diff=1121"/>
		<updated>2026-05-18T12:58:20Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Willkommen in Münster==&lt;br /&gt;
Münster4you ist eine Plattform, die allen Menschen in Münster ermöglicht, Informationen schnell und unkompliziert abzurufen. Mit der Integration einer künstlichen Intelligenz, ähnlich wie eine Chat-Funktion, können alle Fragen stellen und erhalten Antworten für Münster, gleichzeitig findet sich neues und altbekanntes Wissen strukturiert aufbereitet.&lt;br /&gt;
&lt;br /&gt;
{{#widget:ChatBox}}&lt;br /&gt;
&lt;br /&gt;
== Bereiche dieser Seite ==&lt;br /&gt;
{{#widget:StartseitenBild|bildUrl=/w/images/6/64/Pexels-cottonbro-5137967.jpeg|link=Ankommen|text=Ankommen in Münster}}&lt;br /&gt;
&lt;br /&gt;
{{#widget:StartseitenBild|bildUrl=/w/images/f/f8/Aasee-Herbst-03-Philipp-Foelting-CC-BY-SA.jpg|link=Freizeit|text=Freizeit &amp;amp; Socializing}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
{{#widget:StartseitenBild|bildUrl=/w/images/c/c2/Münster_oben.jpg|link=Stadtteile|text=Stadtteil-Infoseiten}}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Karte von Münster == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;display_map height=&amp;quot;300px&amp;quot; scrollwheelzoom=&amp;quot;off&amp;quot; service=&amp;quot;leaflet&amp;quot;&amp;gt;&lt;br /&gt;
  Münster, Germany~Die Stadt Münster~Mein schönes Münster~ ~ ~Münster&lt;br /&gt;
  Mauritz-Lindenweg 95, 48145 Münster~Münster 08~Bester Sportverein~ ~ ~Münster 08&lt;br /&gt;
  Stühmerweg 8, 48147 Münster, Germany~Gesundheitsamt~&lt;br /&gt;
  Hafenstraße 30, 48153 Münster, Germany~Amt für Kinder, Jugend und Familien~&lt;br /&gt;
  Hafenstraße 8, 48153 Münster, Germany~Sozialamt~&lt;br /&gt;
  Alter Steinweg 11, 48143 Münster, ~Stadtbücherei~&lt;br /&gt;
&amp;lt;/display_map&amp;gt;&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Widget:StartseitenSuche&amp;diff=1120</id>
		<title>Widget:StartseitenSuche</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Widget:StartseitenSuche&amp;diff=1120"/>
		<updated>2026-05-05T19:54:24Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;overlay-container&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;overlay-content&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;chat-widget&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div id=&amp;quot;chat-messages&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div id=&amp;quot;chat-sources-panel&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;form id=&amp;quot;chat-form&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;chat-input&amp;quot; placeholder=&amp;quot;Stelle mir deine Frage …&amp;quot; autocomplete=&amp;quot;off&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;button type=&amp;quot;submit&amp;quot; id=&amp;quot;chat-send&amp;quot;&amp;gt;Fragen&amp;lt;/button&amp;gt;&lt;br /&gt;
      &amp;lt;/form&amp;gt;&lt;br /&gt;
      &amp;lt;div id=&amp;quot;chat-footer&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;span id=&amp;quot;chat-status&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;button id=&amp;quot;chat-new&amp;quot; type=&amp;quot;button&amp;quot;&amp;gt;Neue Unterhaltung&amp;lt;/button&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.overlay-container {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  min-height: 400px;&lt;br /&gt;
  padding: 24px;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  border-radius: 12px;&lt;br /&gt;
  background-color: #2f3e46;&lt;br /&gt;
  background-image: url(&amp;quot;/w/images/a/a9/Schloss-Muenster-Philipp-Foelting-CC-BY-SA.jpg&amp;quot;);&lt;br /&gt;
  background-size: cover;&lt;br /&gt;
  background-position: center;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.overlay-container::before {&lt;br /&gt;
  content: &amp;quot;&amp;quot;;&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  inset: 0;&lt;br /&gt;
  background: rgba(0, 0, 0, 0.38);&lt;br /&gt;
  z-index: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.overlay-content {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  z-index: 2;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  max-width: 860px;&lt;br /&gt;
  padding: 0px;&lt;br /&gt;
  border-radius: 12px;&lt;br /&gt;
  background: rgba(255, 255, 255, 0.92);&lt;br /&gt;
  backdrop-filter: blur(4px);&lt;br /&gt;
  -webkit-backdrop-filter: blur(4px);&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-widget {&lt;br /&gt;
  width: 80%;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  font-family: -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-messages {&lt;br /&gt;
  min-height: 120px;&lt;br /&gt;
  max-height: 500px;&lt;br /&gt;
  overflow-y: auto;&lt;br /&gt;
  padding: 8px 0;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-messages:empty::before {&lt;br /&gt;
  content: &amp;quot;Stelle eine Frage und erhalte Antworten basierend auf dem Münster Wiki und ausgewählten Web-Inhalten für Münster. Beachte: KI-Suche kann Fehler machen. Prüfe deine Ergebnisse sorgfältig. Verwende keine personenbezogenen Daten.&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  color: #666;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  padding: 20px 16px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg {&lt;br /&gt;
  max-width: 85%;&lt;br /&gt;
  padding: 10px 14px;&lt;br /&gt;
  border-radius: 10px;&lt;br /&gt;
  font-size: 14.5px;&lt;br /&gt;
  line-height: 1.55;&lt;br /&gt;
  word-wrap: break-word;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-user {&lt;br /&gt;
  align-self: flex-end;&lt;br /&gt;
  background: #00308D;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  border-bottom-right-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-assistant {&lt;br /&gt;
  align-self: flex-start;&lt;br /&gt;
  background: #f0f2f5;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  border-bottom-left-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-assistant p {&lt;br /&gt;
  margin: 0 0 8px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-assistant p:last-child {&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@keyframes chatDots {&lt;br /&gt;
  0%, 80%, 100% { opacity: 0.3; }&lt;br /&gt;
  40% { opacity: 1; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-loading-dots span {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  width: 7px;&lt;br /&gt;
  height: 7px;&lt;br /&gt;
  margin: 0 2px;&lt;br /&gt;
  background: #999;&lt;br /&gt;
  border-radius: 50%;&lt;br /&gt;
  animation: chatDots 1.2s ease-in-out infinite;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-loading-dots span:nth-child(2) { animation-delay: 0.15s; }&lt;br /&gt;
.chat-loading-dots span:nth-child(3) { animation-delay: 0.3s; }&lt;br /&gt;
&lt;br /&gt;
#chat-sources-panel {&lt;br /&gt;
  display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-sources-panel.visible {&lt;br /&gt;
  display: block;&lt;br /&gt;
  margin: 4px 0 8px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-sources-toggle {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: 1px solid #ddd;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  padding: 6px 12px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-sources-toggle:hover {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-sources-list {&lt;br /&gt;
  display: none;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-sources-list.open {&lt;br /&gt;
  display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item {&lt;br /&gt;
  padding: 10px 12px;&lt;br /&gt;
  margin-bottom: 6px;&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  transition: border-color 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item:hover {&lt;br /&gt;
  border-color: #b0b8c1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item h5 {&lt;br /&gt;
  margin: 0 0 3px 0;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item h5 a {&lt;br /&gt;
  color: #00308D;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item h5 a:hover {&lt;br /&gt;
  text-decoration: underline;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item .chat-source-snippet {&lt;br /&gt;
  font-size: 12.5px;&lt;br /&gt;
  line-height: 1.45;&lt;br /&gt;
  color: #666;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item .chat-source-meta {&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  color: #999;&lt;br /&gt;
  margin-top: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-form {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-input {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  padding: 10px 14px;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  border: 1px solid #ccc;&lt;br /&gt;
  border-right: none;&lt;br /&gt;
  border-radius: 4px 0 0 4px;&lt;br /&gt;
  outline: none;&lt;br /&gt;
  transition: border-color 0.2s;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  min-width: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-input:focus {&lt;br /&gt;
  border-color: #4CAF50;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-input:disabled {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
  color: #999;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-send {&lt;br /&gt;
  padding: 10px 20px;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  background: #4CAF50;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-radius: 0 4px 4px 0;&lt;br /&gt;
  transition: background 0.2s;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-send:hover {&lt;br /&gt;
  background: #43A047;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-send:disabled {&lt;br /&gt;
  background: #a5d6a7;&lt;br /&gt;
  cursor: not-allowed;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-footer {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: space-between;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
  min-height: 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-status {&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #666;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-new {&lt;br /&gt;
  display: none;&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: 1px solid #ccc;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  padding: 4px 12px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-new:hover {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-new.visible {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-error {&lt;br /&gt;
  align-self: center;&lt;br /&gt;
  background: #fef2f2;&lt;br /&gt;
  color: #b00;&lt;br /&gt;
  border: 1px solid #fca5a5;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  padding: 8px 14px;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Tablet */&lt;br /&gt;
@media (max-width: 900px) {&lt;br /&gt;
  .overlay-container {&lt;br /&gt;
    min-height: 340px;&lt;br /&gt;
    padding: 18px;&lt;br /&gt;
    border-radius: 10px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .overlay-content {&lt;br /&gt;
    padding: 16px;&lt;br /&gt;
    border-radius: 10px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Smartphone */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
  .overlay-container {&lt;br /&gt;
    min-height: 280px;&lt;br /&gt;
    padding: 12px;&lt;br /&gt;
    align-items: stretch;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .overlay-content {&lt;br /&gt;
    padding: 14px;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-form {&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    gap: 8px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-input {&lt;br /&gt;
    border-right: 1px solid #ccc;&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-send {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .chat-msg {&lt;br /&gt;
    max-width: 100%;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-footer {&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Kleine Smartphones */&lt;br /&gt;
@media (max-width: 400px) {&lt;br /&gt;
  .overlay-container {&lt;br /&gt;
    min-height: 240px;&lt;br /&gt;
    padding: 10px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .overlay-content {&lt;br /&gt;
    padding: 12px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-messages {&lt;br /&gt;
    max-height: 420px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .chat-msg {&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
    padding: 9px 12px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function() {&lt;br /&gt;
  var form = document.getElementById(&#039;chat-form&#039;);&lt;br /&gt;
  var input = document.getElementById(&#039;chat-input&#039;);&lt;br /&gt;
  var sendBtn = document.getElementById(&#039;chat-send&#039;);&lt;br /&gt;
  var messagesEl = document.getElementById(&#039;chat-messages&#039;);&lt;br /&gt;
  var sourcesPanel = document.getElementById(&#039;chat-sources-panel&#039;);&lt;br /&gt;
  var statusEl = document.getElementById(&#039;chat-status&#039;);&lt;br /&gt;
  var newBtn = document.getElementById(&#039;chat-new&#039;);&lt;br /&gt;
  var apiHost = &#039;api.&#039; + location.hostname.split(&#039;.&#039;).slice(1).join(&#039;.&#039;);&lt;br /&gt;
&lt;br /&gt;
  var conversationId = null;&lt;br /&gt;
  var isLoading = false;&lt;br /&gt;
&lt;br /&gt;
  function escapeHtml(str) {&lt;br /&gt;
    var d = document.createElement(&#039;div&#039;);&lt;br /&gt;
    d.textContent = str;&lt;br /&gt;
    return d.innerHTML;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function truncate(str, len) {&lt;br /&gt;
    if (str.length &amp;lt;= len) return str;&lt;br /&gt;
    return str.substring(0, len).replace(/\\s+\\S*$/, &#039;&#039;) + &#039;\\u2026&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function formatAnswer(text) {&lt;br /&gt;
    var html = escapeHtml(text);&lt;br /&gt;
    html = html.replace(/\\*\\*(.+?)\\*\\*/g, &#039;&amp;lt;strong&amp;gt;$1&amp;lt;/strong&amp;gt;&#039;);&lt;br /&gt;
    var paragraphs = html.split(/\\n{2,}/);&lt;br /&gt;
    if (paragraphs.length &amp;gt; 1) {&lt;br /&gt;
      html = paragraphs.map(function(p) { return &#039;&amp;lt;p&amp;gt;&#039; + p.replace(/\\n/g, &#039;&amp;lt;br&amp;gt;&#039;) + &#039;&amp;lt;/p&amp;gt;&#039;; }).join(&#039;&#039;);&lt;br /&gt;
    } else {&lt;br /&gt;
      html = html.replace(/\\n/g, &#039;&amp;lt;br&amp;gt;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    return html;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addUserMessage(text) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-user&#039;;&lt;br /&gt;
    div.textContent = text;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addAssistantMessage(text) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-assistant&#039;;&lt;br /&gt;
    div.innerHTML = formatAnswer(text);&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addLoadingIndicator() {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-assistant chat-loading-dots&#039;;&lt;br /&gt;
    div.id = &#039;chat-loading&#039;;&lt;br /&gt;
    div.innerHTML = &#039;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function removeLoadingIndicator() {&lt;br /&gt;
    var el = document.getElementById(&#039;chat-loading&#039;);&lt;br /&gt;
    if (el) el.remove();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addError(msg) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-error&#039;;&lt;br /&gt;
    div.textContent = msg;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function scrollToBottom() {&lt;br /&gt;
    messagesEl.scrollTop = messagesEl.scrollHeight;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function renderSources(sources) {&lt;br /&gt;
    if (!sources || sources.length === 0) {&lt;br /&gt;
      sourcesPanel.className = &#039;&#039;;&lt;br /&gt;
      sourcesPanel.innerHTML = &#039;&#039;;&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    sourcesPanel.className = &#039;visible&#039;;&lt;br /&gt;
    var listId = &#039;src-list-&#039; + Date.now();&lt;br /&gt;
    var html = &#039;&amp;lt;button class=&amp;quot;chat-sources-toggle&amp;quot; onclick=&amp;quot;var l=document.getElementById(\\&#039;&#039; + listId + &#039;\\&#039;);l.classList.toggle(\\&#039;open\\&#039;);this.textContent=l.classList.contains(\\&#039;open\\&#039;)?\\&#039;▲ Quellen verbergen\\&#039;:\\&#039;▼ &#039; + sources.length + &#039; Quellen anzeigen\\&#039;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
      + &#039;▼ &#039; + sources.length + &#039; Quellen anzeigen&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
    html += &#039;&amp;lt;div class=&amp;quot;chat-sources-list&amp;quot; id=&amp;quot;&#039; + listId + &#039;&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
    sources.forEach(function(s) {&lt;br /&gt;
      var pct = Math.round((s.similarity_score || 0) * 100);&lt;br /&gt;
      var wikiUrl = &#039;/wiki/&#039; + encodeURIComponent((s.page_title || &#039;&#039;).replace(/ /g, &#039;_&#039;));&lt;br /&gt;
      html += &#039;&amp;lt;div class=&amp;quot;chat-source-item&amp;quot;&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;h5&amp;gt;&amp;lt;a href=&amp;quot;&#039; + wikiUrl + &#039;&amp;quot;&amp;gt;&#039; + escapeHtml(s.page_title || &#039;&#039;) + &#039;&amp;lt;/a&amp;gt;&amp;lt;/h5&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;p class=&amp;quot;chat-source-snippet&amp;quot;&amp;gt;&#039; + escapeHtml(truncate(s.content_text || &#039;&#039;, 150)) + &#039;&amp;lt;/p&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;div class=&amp;quot;chat-source-meta&amp;quot;&amp;gt;Relevanz: &#039; + pct + &#039;% · &#039; + escapeHtml(s.source || &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    });&lt;br /&gt;
    html += &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    sourcesPanel.innerHTML = html;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function setLoading(loading) {&lt;br /&gt;
    isLoading = loading;&lt;br /&gt;
    input.disabled = loading;&lt;br /&gt;
    sendBtn.disabled = loading;&lt;br /&gt;
    if (loading) {&lt;br /&gt;
      addLoadingIndicator();&lt;br /&gt;
    } else {&lt;br /&gt;
      removeLoadingIndicator();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function updateStatus(remaining) {&lt;br /&gt;
    if (remaining &amp;gt; 0) {&lt;br /&gt;
      statusEl.textContent = remaining + &#039; R\\u00fcckfrage&#039; + (remaining !== 1 ? &#039;n&#039; : &#039;&#039;) + &#039; verbleibend&#039;;&lt;br /&gt;
    } else if (remaining === 0) {&lt;br /&gt;
      if (conversationId) {&lt;br /&gt;
        statusEl.textContent = &#039;Keine R\\u00fcckfragen mehr m\\u00f6glich&#039;;&lt;br /&gt;
        input.disabled = true;&lt;br /&gt;
        sendBtn.disabled = true;&lt;br /&gt;
        input.placeholder = &#039;Starte eine neue Unterhaltung&#039;;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    newBtn.className = conversationId ? &#039;visible&#039; : &#039;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function resetConversation() {&lt;br /&gt;
    conversationId = null;&lt;br /&gt;
    messagesEl.innerHTML = &#039;&#039;;&lt;br /&gt;
    sourcesPanel.className = &#039;&#039;;&lt;br /&gt;
    sourcesPanel.innerHTML = &#039;&#039;;&lt;br /&gt;
    statusEl.textContent = &#039;&#039;;&lt;br /&gt;
    newBtn.className = &#039;&#039;;&lt;br /&gt;
    input.disabled = false;&lt;br /&gt;
    sendBtn.disabled = false;&lt;br /&gt;
    input.placeholder = &#039;Stelle eine Frage \\u00fcber M\\u00fcnster \\u2026&#039;;&lt;br /&gt;
    input.focus();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  newBtn.addEventListener(&#039;click&#039;, resetConversation);&lt;br /&gt;
&lt;br /&gt;
  form.addEventListener(&#039;submit&#039;, function(e) {&lt;br /&gt;
    e.preventDefault();&lt;br /&gt;
    if (isLoading) return;&lt;br /&gt;
    var message = input.value.trim();&lt;br /&gt;
    if (!message) return;&lt;br /&gt;
&lt;br /&gt;
    input.value = &#039;&#039;;&lt;br /&gt;
    addUserMessage(message);&lt;br /&gt;
    setLoading(true);&lt;br /&gt;
&lt;br /&gt;
    var body = { message: message };&lt;br /&gt;
    if (conversationId) {&lt;br /&gt;
      body.conversation_id = conversationId;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var url = location.protocol + &#039;//&#039; + apiHost + &#039;/chat&#039;;&lt;br /&gt;
&lt;br /&gt;
    fetch(url, {&lt;br /&gt;
      method: &#039;POST&#039;,&lt;br /&gt;
      headers: { &#039;Content-Type&#039;: &#039;application/json&#039; },&lt;br /&gt;
      body: JSON.stringify(body)&lt;br /&gt;
    })&lt;br /&gt;
      .then(function(res) {&lt;br /&gt;
        if (!res.ok) {&lt;br /&gt;
          return res.json().then(function(data) {&lt;br /&gt;
            throw new Error(data.detail || &#039;HTTP &#039; + res.status);&lt;br /&gt;
          });&lt;br /&gt;
        }&lt;br /&gt;
        return res.json();&lt;br /&gt;
      })&lt;br /&gt;
      .then(function(data) {&lt;br /&gt;
        setLoading(false);&lt;br /&gt;
        conversationId = data.conversation_id;&lt;br /&gt;
        addAssistantMessage(data.answer);&lt;br /&gt;
        renderSources(data.sources);&lt;br /&gt;
        updateStatus(data.remaining_followups);&lt;br /&gt;
        input.focus();&lt;br /&gt;
      })&lt;br /&gt;
      .catch(function(err) {&lt;br /&gt;
        setLoading(false);&lt;br /&gt;
        addError(&#039;Fehler: &#039; + err.message);&lt;br /&gt;
        input.focus();&lt;br /&gt;
      });&lt;br /&gt;
  });&lt;br /&gt;
})();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Widget:StartseitenSuche&amp;diff=1119</id>
		<title>Widget:StartseitenSuche</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Widget:StartseitenSuche&amp;diff=1119"/>
		<updated>2026-05-05T19:45:19Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;overlay-container&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;overlay-content&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;chat-widget&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div id=&amp;quot;chat-messages&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div id=&amp;quot;chat-sources-panel&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;form id=&amp;quot;chat-form&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;chat-input&amp;quot; placeholder=&amp;quot;Stelle mir deine Frage …&amp;quot; autocomplete=&amp;quot;off&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;button type=&amp;quot;submit&amp;quot; id=&amp;quot;chat-send&amp;quot;&amp;gt;Fragen&amp;lt;/button&amp;gt;&lt;br /&gt;
      &amp;lt;/form&amp;gt;&lt;br /&gt;
      &amp;lt;div id=&amp;quot;chat-footer&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;span id=&amp;quot;chat-status&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;button id=&amp;quot;chat-new&amp;quot; type=&amp;quot;button&amp;quot;&amp;gt;Neue Unterhaltung&amp;lt;/button&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.overlay-container {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  min-height: 400px;&lt;br /&gt;
  padding: 24px;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  border-radius: 12px;&lt;br /&gt;
  background-color: #2f3e46;&lt;br /&gt;
  background-image: url(&amp;quot;/w/images/a/a9/Schloss-Muenster-Philipp-Foelting-CC-BY-SA.jpg&amp;quot;);&lt;br /&gt;
  background-size: cover;&lt;br /&gt;
  background-position: center;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.overlay-container::before {&lt;br /&gt;
  content: &amp;quot;&amp;quot;;&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  inset: 0;&lt;br /&gt;
  background: rgba(0, 0, 0, 0.38);&lt;br /&gt;
  z-index: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.overlay-content {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  z-index: 2;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  max-width: 860px;&lt;br /&gt;
  padding: 0px;&lt;br /&gt;
  border-radius: 12px;&lt;br /&gt;
  background: rgba(255, 255, 255, 0.92);&lt;br /&gt;
  backdrop-filter: blur(4px);&lt;br /&gt;
  -webkit-backdrop-filter: blur(4px);&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-widget {&lt;br /&gt;
  width: 80%;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  font-family: -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-messages {&lt;br /&gt;
  min-height: 120px;&lt;br /&gt;
  max-height: 500px;&lt;br /&gt;
  overflow-y: auto;&lt;br /&gt;
  padding: 8px 0;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-messages:empty::before {&lt;br /&gt;
  content: &amp;quot;Stelle eine Frage und erhalte Antworten basierend auf dem Münster Wiki und ausgewählten Web-Inhalten für Münster. Beachte: KI-Suche kann Fehler machen. Prüfe deine Ergebnisse sorgfältig. Verwende keine personenbezogenen Daten.&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  color: #666;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  padding: 40px 16px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg {&lt;br /&gt;
  max-width: 85%;&lt;br /&gt;
  padding: 10px 14px;&lt;br /&gt;
  border-radius: 10px;&lt;br /&gt;
  font-size: 14.5px;&lt;br /&gt;
  line-height: 1.55;&lt;br /&gt;
  word-wrap: break-word;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-user {&lt;br /&gt;
  align-self: flex-end;&lt;br /&gt;
  background: #00308D;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  border-bottom-right-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-assistant {&lt;br /&gt;
  align-self: flex-start;&lt;br /&gt;
  background: #f0f2f5;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  border-bottom-left-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-assistant p {&lt;br /&gt;
  margin: 0 0 8px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-assistant p:last-child {&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@keyframes chatDots {&lt;br /&gt;
  0%, 80%, 100% { opacity: 0.3; }&lt;br /&gt;
  40% { opacity: 1; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-loading-dots span {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  width: 7px;&lt;br /&gt;
  height: 7px;&lt;br /&gt;
  margin: 0 2px;&lt;br /&gt;
  background: #999;&lt;br /&gt;
  border-radius: 50%;&lt;br /&gt;
  animation: chatDots 1.2s ease-in-out infinite;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-loading-dots span:nth-child(2) { animation-delay: 0.15s; }&lt;br /&gt;
.chat-loading-dots span:nth-child(3) { animation-delay: 0.3s; }&lt;br /&gt;
&lt;br /&gt;
#chat-sources-panel {&lt;br /&gt;
  display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-sources-panel.visible {&lt;br /&gt;
  display: block;&lt;br /&gt;
  margin: 4px 0 8px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-sources-toggle {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: 1px solid #ddd;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  padding: 6px 12px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-sources-toggle:hover {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-sources-list {&lt;br /&gt;
  display: none;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-sources-list.open {&lt;br /&gt;
  display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item {&lt;br /&gt;
  padding: 10px 12px;&lt;br /&gt;
  margin-bottom: 6px;&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  transition: border-color 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item:hover {&lt;br /&gt;
  border-color: #b0b8c1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item h5 {&lt;br /&gt;
  margin: 0 0 3px 0;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item h5 a {&lt;br /&gt;
  color: #00308D;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item h5 a:hover {&lt;br /&gt;
  text-decoration: underline;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item .chat-source-snippet {&lt;br /&gt;
  font-size: 12.5px;&lt;br /&gt;
  line-height: 1.45;&lt;br /&gt;
  color: #666;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item .chat-source-meta {&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  color: #999;&lt;br /&gt;
  margin-top: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-form {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-input {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  padding: 10px 14px;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  border: 1px solid #ccc;&lt;br /&gt;
  border-right: none;&lt;br /&gt;
  border-radius: 4px 0 0 4px;&lt;br /&gt;
  outline: none;&lt;br /&gt;
  transition: border-color 0.2s;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  min-width: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-input:focus {&lt;br /&gt;
  border-color: #4CAF50;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-input:disabled {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
  color: #999;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-send {&lt;br /&gt;
  padding: 10px 20px;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  background: #4CAF50;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-radius: 0 4px 4px 0;&lt;br /&gt;
  transition: background 0.2s;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-send:hover {&lt;br /&gt;
  background: #43A047;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-send:disabled {&lt;br /&gt;
  background: #a5d6a7;&lt;br /&gt;
  cursor: not-allowed;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-footer {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: space-between;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
  min-height: 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-status {&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #666;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-new {&lt;br /&gt;
  display: none;&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: 1px solid #ccc;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  padding: 4px 12px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-new:hover {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-new.visible {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-error {&lt;br /&gt;
  align-self: center;&lt;br /&gt;
  background: #fef2f2;&lt;br /&gt;
  color: #b00;&lt;br /&gt;
  border: 1px solid #fca5a5;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  padding: 8px 14px;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Tablet */&lt;br /&gt;
@media (max-width: 900px) {&lt;br /&gt;
  .overlay-container {&lt;br /&gt;
    min-height: 340px;&lt;br /&gt;
    padding: 18px;&lt;br /&gt;
    border-radius: 10px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .overlay-content {&lt;br /&gt;
    padding: 16px;&lt;br /&gt;
    border-radius: 10px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Smartphone */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
  .overlay-container {&lt;br /&gt;
    min-height: 280px;&lt;br /&gt;
    padding: 12px;&lt;br /&gt;
    align-items: stretch;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .overlay-content {&lt;br /&gt;
    padding: 14px;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-form {&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    gap: 8px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-input {&lt;br /&gt;
    border-right: 1px solid #ccc;&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-send {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .chat-msg {&lt;br /&gt;
    max-width: 100%;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-footer {&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Kleine Smartphones */&lt;br /&gt;
@media (max-width: 400px) {&lt;br /&gt;
  .overlay-container {&lt;br /&gt;
    min-height: 240px;&lt;br /&gt;
    padding: 10px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .overlay-content {&lt;br /&gt;
    padding: 12px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-messages {&lt;br /&gt;
    max-height: 420px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .chat-msg {&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
    padding: 9px 12px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function() {&lt;br /&gt;
  var form = document.getElementById(&#039;chat-form&#039;);&lt;br /&gt;
  var input = document.getElementById(&#039;chat-input&#039;);&lt;br /&gt;
  var sendBtn = document.getElementById(&#039;chat-send&#039;);&lt;br /&gt;
  var messagesEl = document.getElementById(&#039;chat-messages&#039;);&lt;br /&gt;
  var sourcesPanel = document.getElementById(&#039;chat-sources-panel&#039;);&lt;br /&gt;
  var statusEl = document.getElementById(&#039;chat-status&#039;);&lt;br /&gt;
  var newBtn = document.getElementById(&#039;chat-new&#039;);&lt;br /&gt;
  var apiHost = &#039;api.&#039; + location.hostname.split(&#039;.&#039;).slice(1).join(&#039;.&#039;);&lt;br /&gt;
&lt;br /&gt;
  var conversationId = null;&lt;br /&gt;
  var isLoading = false;&lt;br /&gt;
&lt;br /&gt;
  function escapeHtml(str) {&lt;br /&gt;
    var d = document.createElement(&#039;div&#039;);&lt;br /&gt;
    d.textContent = str;&lt;br /&gt;
    return d.innerHTML;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function truncate(str, len) {&lt;br /&gt;
    if (str.length &amp;lt;= len) return str;&lt;br /&gt;
    return str.substring(0, len).replace(/\\s+\\S*$/, &#039;&#039;) + &#039;\\u2026&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function formatAnswer(text) {&lt;br /&gt;
    var html = escapeHtml(text);&lt;br /&gt;
    html = html.replace(/\\*\\*(.+?)\\*\\*/g, &#039;&amp;lt;strong&amp;gt;$1&amp;lt;/strong&amp;gt;&#039;);&lt;br /&gt;
    var paragraphs = html.split(/\\n{2,}/);&lt;br /&gt;
    if (paragraphs.length &amp;gt; 1) {&lt;br /&gt;
      html = paragraphs.map(function(p) { return &#039;&amp;lt;p&amp;gt;&#039; + p.replace(/\\n/g, &#039;&amp;lt;br&amp;gt;&#039;) + &#039;&amp;lt;/p&amp;gt;&#039;; }).join(&#039;&#039;);&lt;br /&gt;
    } else {&lt;br /&gt;
      html = html.replace(/\\n/g, &#039;&amp;lt;br&amp;gt;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    return html;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addUserMessage(text) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-user&#039;;&lt;br /&gt;
    div.textContent = text;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addAssistantMessage(text) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-assistant&#039;;&lt;br /&gt;
    div.innerHTML = formatAnswer(text);&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addLoadingIndicator() {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-assistant chat-loading-dots&#039;;&lt;br /&gt;
    div.id = &#039;chat-loading&#039;;&lt;br /&gt;
    div.innerHTML = &#039;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function removeLoadingIndicator() {&lt;br /&gt;
    var el = document.getElementById(&#039;chat-loading&#039;);&lt;br /&gt;
    if (el) el.remove();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addError(msg) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-error&#039;;&lt;br /&gt;
    div.textContent = msg;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function scrollToBottom() {&lt;br /&gt;
    messagesEl.scrollTop = messagesEl.scrollHeight;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function renderSources(sources) {&lt;br /&gt;
    if (!sources || sources.length === 0) {&lt;br /&gt;
      sourcesPanel.className = &#039;&#039;;&lt;br /&gt;
      sourcesPanel.innerHTML = &#039;&#039;;&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    sourcesPanel.className = &#039;visible&#039;;&lt;br /&gt;
    var listId = &#039;src-list-&#039; + Date.now();&lt;br /&gt;
    var html = &#039;&amp;lt;button class=&amp;quot;chat-sources-toggle&amp;quot; onclick=&amp;quot;var l=document.getElementById(\\&#039;&#039; + listId + &#039;\\&#039;);l.classList.toggle(\\&#039;open\\&#039;);this.textContent=l.classList.contains(\\&#039;open\\&#039;)?\\&#039;▲ Quellen verbergen\\&#039;:\\&#039;▼ &#039; + sources.length + &#039; Quellen anzeigen\\&#039;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
      + &#039;▼ &#039; + sources.length + &#039; Quellen anzeigen&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
    html += &#039;&amp;lt;div class=&amp;quot;chat-sources-list&amp;quot; id=&amp;quot;&#039; + listId + &#039;&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
    sources.forEach(function(s) {&lt;br /&gt;
      var pct = Math.round((s.similarity_score || 0) * 100);&lt;br /&gt;
      var wikiUrl = &#039;/wiki/&#039; + encodeURIComponent((s.page_title || &#039;&#039;).replace(/ /g, &#039;_&#039;));&lt;br /&gt;
      html += &#039;&amp;lt;div class=&amp;quot;chat-source-item&amp;quot;&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;h5&amp;gt;&amp;lt;a href=&amp;quot;&#039; + wikiUrl + &#039;&amp;quot;&amp;gt;&#039; + escapeHtml(s.page_title || &#039;&#039;) + &#039;&amp;lt;/a&amp;gt;&amp;lt;/h5&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;p class=&amp;quot;chat-source-snippet&amp;quot;&amp;gt;&#039; + escapeHtml(truncate(s.content_text || &#039;&#039;, 150)) + &#039;&amp;lt;/p&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;div class=&amp;quot;chat-source-meta&amp;quot;&amp;gt;Relevanz: &#039; + pct + &#039;% · &#039; + escapeHtml(s.source || &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    });&lt;br /&gt;
    html += &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    sourcesPanel.innerHTML = html;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function setLoading(loading) {&lt;br /&gt;
    isLoading = loading;&lt;br /&gt;
    input.disabled = loading;&lt;br /&gt;
    sendBtn.disabled = loading;&lt;br /&gt;
    if (loading) {&lt;br /&gt;
      addLoadingIndicator();&lt;br /&gt;
    } else {&lt;br /&gt;
      removeLoadingIndicator();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function updateStatus(remaining) {&lt;br /&gt;
    if (remaining &amp;gt; 0) {&lt;br /&gt;
      statusEl.textContent = remaining + &#039; R\\u00fcckfrage&#039; + (remaining !== 1 ? &#039;n&#039; : &#039;&#039;) + &#039; verbleibend&#039;;&lt;br /&gt;
    } else if (remaining === 0) {&lt;br /&gt;
      if (conversationId) {&lt;br /&gt;
        statusEl.textContent = &#039;Keine R\\u00fcckfragen mehr m\\u00f6glich&#039;;&lt;br /&gt;
        input.disabled = true;&lt;br /&gt;
        sendBtn.disabled = true;&lt;br /&gt;
        input.placeholder = &#039;Starte eine neue Unterhaltung&#039;;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    newBtn.className = conversationId ? &#039;visible&#039; : &#039;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function resetConversation() {&lt;br /&gt;
    conversationId = null;&lt;br /&gt;
    messagesEl.innerHTML = &#039;&#039;;&lt;br /&gt;
    sourcesPanel.className = &#039;&#039;;&lt;br /&gt;
    sourcesPanel.innerHTML = &#039;&#039;;&lt;br /&gt;
    statusEl.textContent = &#039;&#039;;&lt;br /&gt;
    newBtn.className = &#039;&#039;;&lt;br /&gt;
    input.disabled = false;&lt;br /&gt;
    sendBtn.disabled = false;&lt;br /&gt;
    input.placeholder = &#039;Stelle eine Frage \\u00fcber M\\u00fcnster \\u2026&#039;;&lt;br /&gt;
    input.focus();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  newBtn.addEventListener(&#039;click&#039;, resetConversation);&lt;br /&gt;
&lt;br /&gt;
  form.addEventListener(&#039;submit&#039;, function(e) {&lt;br /&gt;
    e.preventDefault();&lt;br /&gt;
    if (isLoading) return;&lt;br /&gt;
    var message = input.value.trim();&lt;br /&gt;
    if (!message) return;&lt;br /&gt;
&lt;br /&gt;
    input.value = &#039;&#039;;&lt;br /&gt;
    addUserMessage(message);&lt;br /&gt;
    setLoading(true);&lt;br /&gt;
&lt;br /&gt;
    var body = { message: message };&lt;br /&gt;
    if (conversationId) {&lt;br /&gt;
      body.conversation_id = conversationId;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var url = location.protocol + &#039;//&#039; + apiHost + &#039;/chat&#039;;&lt;br /&gt;
&lt;br /&gt;
    fetch(url, {&lt;br /&gt;
      method: &#039;POST&#039;,&lt;br /&gt;
      headers: { &#039;Content-Type&#039;: &#039;application/json&#039; },&lt;br /&gt;
      body: JSON.stringify(body)&lt;br /&gt;
    })&lt;br /&gt;
      .then(function(res) {&lt;br /&gt;
        if (!res.ok) {&lt;br /&gt;
          return res.json().then(function(data) {&lt;br /&gt;
            throw new Error(data.detail || &#039;HTTP &#039; + res.status);&lt;br /&gt;
          });&lt;br /&gt;
        }&lt;br /&gt;
        return res.json();&lt;br /&gt;
      })&lt;br /&gt;
      .then(function(data) {&lt;br /&gt;
        setLoading(false);&lt;br /&gt;
        conversationId = data.conversation_id;&lt;br /&gt;
        addAssistantMessage(data.answer);&lt;br /&gt;
        renderSources(data.sources);&lt;br /&gt;
        updateStatus(data.remaining_followups);&lt;br /&gt;
        input.focus();&lt;br /&gt;
      })&lt;br /&gt;
      .catch(function(err) {&lt;br /&gt;
        setLoading(false);&lt;br /&gt;
        addError(&#039;Fehler: &#039; + err.message);&lt;br /&gt;
        input.focus();&lt;br /&gt;
      });&lt;br /&gt;
  });&lt;br /&gt;
})();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Widget:StartseitenSuche&amp;diff=1118</id>
		<title>Widget:StartseitenSuche</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Widget:StartseitenSuche&amp;diff=1118"/>
		<updated>2026-05-05T13:58:21Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;overlay-container&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;overlay-content&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;chat-widget&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div id=&amp;quot;chat-messages&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div id=&amp;quot;chat-sources-panel&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;form id=&amp;quot;chat-form&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;chat-input&amp;quot; placeholder=&amp;quot;Stelle mir deine Frage …&amp;quot; autocomplete=&amp;quot;off&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;button type=&amp;quot;submit&amp;quot; id=&amp;quot;chat-send&amp;quot;&amp;gt;Fragen&amp;lt;/button&amp;gt;&lt;br /&gt;
      &amp;lt;/form&amp;gt;&lt;br /&gt;
      &amp;lt;div id=&amp;quot;chat-footer&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;span id=&amp;quot;chat-status&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;button id=&amp;quot;chat-new&amp;quot; type=&amp;quot;button&amp;quot;&amp;gt;Neue Unterhaltung&amp;lt;/button&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.overlay-container {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  min-height: 400px;&lt;br /&gt;
  padding: 24px;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  border-radius: 12px;&lt;br /&gt;
  background-color: #2f3e46;&lt;br /&gt;
  background-image: url(&amp;quot;/w/images/a/a9/Schloss-Muenster-Philipp-Foelting-CC-BY-SA.jpg&amp;quot;);&lt;br /&gt;
  background-size: cover;&lt;br /&gt;
  background-position: center;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.overlay-container::before {&lt;br /&gt;
  content: &amp;quot;&amp;quot;;&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  inset: 0;&lt;br /&gt;
  background: rgba(0, 0, 0, 0.38);&lt;br /&gt;
  z-index: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.overlay-content {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  z-index: 2;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  max-width: 860px;&lt;br /&gt;
  padding: 20px;&lt;br /&gt;
  border-radius: 12px;&lt;br /&gt;
  background: rgba(255, 255, 255, 0.92);&lt;br /&gt;
  backdrop-filter: blur(4px);&lt;br /&gt;
  -webkit-backdrop-filter: blur(4px);&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-widget {&lt;br /&gt;
  width: 80%;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  font-family: -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-messages {&lt;br /&gt;
  min-height: 120px;&lt;br /&gt;
  max-height: 500px;&lt;br /&gt;
  overflow-y: auto;&lt;br /&gt;
  padding: 8px 0;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-messages:empty::before {&lt;br /&gt;
  content: &amp;quot;Stelle eine Frage und erhalte Antworten basierend auf dem Münster Wiki und ausgewählten Web-Inhalten für Münster. Beachte: KI-Suche kann Fehler machen. Prüfe deine Ergebnisse sorgfältig. Verwende keine personenbezogenen Daten.&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  color: #666;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  padding: 40px 16px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg {&lt;br /&gt;
  max-width: 85%;&lt;br /&gt;
  padding: 10px 14px;&lt;br /&gt;
  border-radius: 10px;&lt;br /&gt;
  font-size: 14.5px;&lt;br /&gt;
  line-height: 1.55;&lt;br /&gt;
  word-wrap: break-word;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-user {&lt;br /&gt;
  align-self: flex-end;&lt;br /&gt;
  background: #00308D;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  border-bottom-right-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-assistant {&lt;br /&gt;
  align-self: flex-start;&lt;br /&gt;
  background: #f0f2f5;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  border-bottom-left-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-assistant p {&lt;br /&gt;
  margin: 0 0 8px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-assistant p:last-child {&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@keyframes chatDots {&lt;br /&gt;
  0%, 80%, 100% { opacity: 0.3; }&lt;br /&gt;
  40% { opacity: 1; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-loading-dots span {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  width: 7px;&lt;br /&gt;
  height: 7px;&lt;br /&gt;
  margin: 0 2px;&lt;br /&gt;
  background: #999;&lt;br /&gt;
  border-radius: 50%;&lt;br /&gt;
  animation: chatDots 1.2s ease-in-out infinite;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-loading-dots span:nth-child(2) { animation-delay: 0.15s; }&lt;br /&gt;
.chat-loading-dots span:nth-child(3) { animation-delay: 0.3s; }&lt;br /&gt;
&lt;br /&gt;
#chat-sources-panel {&lt;br /&gt;
  display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-sources-panel.visible {&lt;br /&gt;
  display: block;&lt;br /&gt;
  margin: 4px 0 8px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-sources-toggle {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: 1px solid #ddd;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  padding: 6px 12px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-sources-toggle:hover {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-sources-list {&lt;br /&gt;
  display: none;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-sources-list.open {&lt;br /&gt;
  display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item {&lt;br /&gt;
  padding: 10px 12px;&lt;br /&gt;
  margin-bottom: 6px;&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  transition: border-color 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item:hover {&lt;br /&gt;
  border-color: #b0b8c1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item h5 {&lt;br /&gt;
  margin: 0 0 3px 0;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item h5 a {&lt;br /&gt;
  color: #00308D;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item h5 a:hover {&lt;br /&gt;
  text-decoration: underline;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item .chat-source-snippet {&lt;br /&gt;
  font-size: 12.5px;&lt;br /&gt;
  line-height: 1.45;&lt;br /&gt;
  color: #666;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item .chat-source-meta {&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  color: #999;&lt;br /&gt;
  margin-top: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-form {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-input {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  padding: 10px 14px;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  border: 1px solid #ccc;&lt;br /&gt;
  border-right: none;&lt;br /&gt;
  border-radius: 4px 0 0 4px;&lt;br /&gt;
  outline: none;&lt;br /&gt;
  transition: border-color 0.2s;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  min-width: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-input:focus {&lt;br /&gt;
  border-color: #4CAF50;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-input:disabled {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
  color: #999;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-send {&lt;br /&gt;
  padding: 10px 20px;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  background: #4CAF50;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-radius: 0 4px 4px 0;&lt;br /&gt;
  transition: background 0.2s;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-send:hover {&lt;br /&gt;
  background: #43A047;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-send:disabled {&lt;br /&gt;
  background: #a5d6a7;&lt;br /&gt;
  cursor: not-allowed;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-footer {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: space-between;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
  min-height: 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-status {&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #666;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-new {&lt;br /&gt;
  display: none;&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: 1px solid #ccc;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  padding: 4px 12px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-new:hover {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-new.visible {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-error {&lt;br /&gt;
  align-self: center;&lt;br /&gt;
  background: #fef2f2;&lt;br /&gt;
  color: #b00;&lt;br /&gt;
  border: 1px solid #fca5a5;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  padding: 8px 14px;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Tablet */&lt;br /&gt;
@media (max-width: 900px) {&lt;br /&gt;
  .overlay-container {&lt;br /&gt;
    min-height: 340px;&lt;br /&gt;
    padding: 18px;&lt;br /&gt;
    border-radius: 10px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .overlay-content {&lt;br /&gt;
    padding: 16px;&lt;br /&gt;
    border-radius: 10px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Smartphone */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
  .overlay-container {&lt;br /&gt;
    min-height: 280px;&lt;br /&gt;
    padding: 12px;&lt;br /&gt;
    align-items: stretch;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .overlay-content {&lt;br /&gt;
    padding: 14px;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-form {&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    gap: 8px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-input {&lt;br /&gt;
    border-right: 1px solid #ccc;&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-send {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .chat-msg {&lt;br /&gt;
    max-width: 100%;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-footer {&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Kleine Smartphones */&lt;br /&gt;
@media (max-width: 400px) {&lt;br /&gt;
  .overlay-container {&lt;br /&gt;
    min-height: 240px;&lt;br /&gt;
    padding: 10px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .overlay-content {&lt;br /&gt;
    padding: 12px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-messages {&lt;br /&gt;
    max-height: 420px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .chat-msg {&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
    padding: 9px 12px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function() {&lt;br /&gt;
  var form = document.getElementById(&#039;chat-form&#039;);&lt;br /&gt;
  var input = document.getElementById(&#039;chat-input&#039;);&lt;br /&gt;
  var sendBtn = document.getElementById(&#039;chat-send&#039;);&lt;br /&gt;
  var messagesEl = document.getElementById(&#039;chat-messages&#039;);&lt;br /&gt;
  var sourcesPanel = document.getElementById(&#039;chat-sources-panel&#039;);&lt;br /&gt;
  var statusEl = document.getElementById(&#039;chat-status&#039;);&lt;br /&gt;
  var newBtn = document.getElementById(&#039;chat-new&#039;);&lt;br /&gt;
  var apiHost = &#039;api.&#039; + location.hostname.split(&#039;.&#039;).slice(1).join(&#039;.&#039;);&lt;br /&gt;
&lt;br /&gt;
  var conversationId = null;&lt;br /&gt;
  var isLoading = false;&lt;br /&gt;
&lt;br /&gt;
  function escapeHtml(str) {&lt;br /&gt;
    var d = document.createElement(&#039;div&#039;);&lt;br /&gt;
    d.textContent = str;&lt;br /&gt;
    return d.innerHTML;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function truncate(str, len) {&lt;br /&gt;
    if (str.length &amp;lt;= len) return str;&lt;br /&gt;
    return str.substring(0, len).replace(/\\s+\\S*$/, &#039;&#039;) + &#039;\\u2026&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function formatAnswer(text) {&lt;br /&gt;
    var html = escapeHtml(text);&lt;br /&gt;
    html = html.replace(/\\*\\*(.+?)\\*\\*/g, &#039;&amp;lt;strong&amp;gt;$1&amp;lt;/strong&amp;gt;&#039;);&lt;br /&gt;
    var paragraphs = html.split(/\\n{2,}/);&lt;br /&gt;
    if (paragraphs.length &amp;gt; 1) {&lt;br /&gt;
      html = paragraphs.map(function(p) { return &#039;&amp;lt;p&amp;gt;&#039; + p.replace(/\\n/g, &#039;&amp;lt;br&amp;gt;&#039;) + &#039;&amp;lt;/p&amp;gt;&#039;; }).join(&#039;&#039;);&lt;br /&gt;
    } else {&lt;br /&gt;
      html = html.replace(/\\n/g, &#039;&amp;lt;br&amp;gt;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    return html;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addUserMessage(text) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-user&#039;;&lt;br /&gt;
    div.textContent = text;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addAssistantMessage(text) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-assistant&#039;;&lt;br /&gt;
    div.innerHTML = formatAnswer(text);&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addLoadingIndicator() {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-assistant chat-loading-dots&#039;;&lt;br /&gt;
    div.id = &#039;chat-loading&#039;;&lt;br /&gt;
    div.innerHTML = &#039;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function removeLoadingIndicator() {&lt;br /&gt;
    var el = document.getElementById(&#039;chat-loading&#039;);&lt;br /&gt;
    if (el) el.remove();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addError(msg) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-error&#039;;&lt;br /&gt;
    div.textContent = msg;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function scrollToBottom() {&lt;br /&gt;
    messagesEl.scrollTop = messagesEl.scrollHeight;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function renderSources(sources) {&lt;br /&gt;
    if (!sources || sources.length === 0) {&lt;br /&gt;
      sourcesPanel.className = &#039;&#039;;&lt;br /&gt;
      sourcesPanel.innerHTML = &#039;&#039;;&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    sourcesPanel.className = &#039;visible&#039;;&lt;br /&gt;
    var listId = &#039;src-list-&#039; + Date.now();&lt;br /&gt;
    var html = &#039;&amp;lt;button class=&amp;quot;chat-sources-toggle&amp;quot; onclick=&amp;quot;var l=document.getElementById(\\&#039;&#039; + listId + &#039;\\&#039;);l.classList.toggle(\\&#039;open\\&#039;);this.textContent=l.classList.contains(\\&#039;open\\&#039;)?\\&#039;▲ Quellen verbergen\\&#039;:\\&#039;▼ &#039; + sources.length + &#039; Quellen anzeigen\\&#039;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
      + &#039;▼ &#039; + sources.length + &#039; Quellen anzeigen&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
    html += &#039;&amp;lt;div class=&amp;quot;chat-sources-list&amp;quot; id=&amp;quot;&#039; + listId + &#039;&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
    sources.forEach(function(s) {&lt;br /&gt;
      var pct = Math.round((s.similarity_score || 0) * 100);&lt;br /&gt;
      var wikiUrl = &#039;/wiki/&#039; + encodeURIComponent((s.page_title || &#039;&#039;).replace(/ /g, &#039;_&#039;));&lt;br /&gt;
      html += &#039;&amp;lt;div class=&amp;quot;chat-source-item&amp;quot;&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;h5&amp;gt;&amp;lt;a href=&amp;quot;&#039; + wikiUrl + &#039;&amp;quot;&amp;gt;&#039; + escapeHtml(s.page_title || &#039;&#039;) + &#039;&amp;lt;/a&amp;gt;&amp;lt;/h5&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;p class=&amp;quot;chat-source-snippet&amp;quot;&amp;gt;&#039; + escapeHtml(truncate(s.content_text || &#039;&#039;, 150)) + &#039;&amp;lt;/p&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;div class=&amp;quot;chat-source-meta&amp;quot;&amp;gt;Relevanz: &#039; + pct + &#039;% · &#039; + escapeHtml(s.source || &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    });&lt;br /&gt;
    html += &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    sourcesPanel.innerHTML = html;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function setLoading(loading) {&lt;br /&gt;
    isLoading = loading;&lt;br /&gt;
    input.disabled = loading;&lt;br /&gt;
    sendBtn.disabled = loading;&lt;br /&gt;
    if (loading) {&lt;br /&gt;
      addLoadingIndicator();&lt;br /&gt;
    } else {&lt;br /&gt;
      removeLoadingIndicator();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function updateStatus(remaining) {&lt;br /&gt;
    if (remaining &amp;gt; 0) {&lt;br /&gt;
      statusEl.textContent = remaining + &#039; R\\u00fcckfrage&#039; + (remaining !== 1 ? &#039;n&#039; : &#039;&#039;) + &#039; verbleibend&#039;;&lt;br /&gt;
    } else if (remaining === 0) {&lt;br /&gt;
      if (conversationId) {&lt;br /&gt;
        statusEl.textContent = &#039;Keine R\\u00fcckfragen mehr m\\u00f6glich&#039;;&lt;br /&gt;
        input.disabled = true;&lt;br /&gt;
        sendBtn.disabled = true;&lt;br /&gt;
        input.placeholder = &#039;Starte eine neue Unterhaltung&#039;;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    newBtn.className = conversationId ? &#039;visible&#039; : &#039;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function resetConversation() {&lt;br /&gt;
    conversationId = null;&lt;br /&gt;
    messagesEl.innerHTML = &#039;&#039;;&lt;br /&gt;
    sourcesPanel.className = &#039;&#039;;&lt;br /&gt;
    sourcesPanel.innerHTML = &#039;&#039;;&lt;br /&gt;
    statusEl.textContent = &#039;&#039;;&lt;br /&gt;
    newBtn.className = &#039;&#039;;&lt;br /&gt;
    input.disabled = false;&lt;br /&gt;
    sendBtn.disabled = false;&lt;br /&gt;
    input.placeholder = &#039;Stelle eine Frage \\u00fcber M\\u00fcnster \\u2026&#039;;&lt;br /&gt;
    input.focus();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  newBtn.addEventListener(&#039;click&#039;, resetConversation);&lt;br /&gt;
&lt;br /&gt;
  form.addEventListener(&#039;submit&#039;, function(e) {&lt;br /&gt;
    e.preventDefault();&lt;br /&gt;
    if (isLoading) return;&lt;br /&gt;
    var message = input.value.trim();&lt;br /&gt;
    if (!message) return;&lt;br /&gt;
&lt;br /&gt;
    input.value = &#039;&#039;;&lt;br /&gt;
    addUserMessage(message);&lt;br /&gt;
    setLoading(true);&lt;br /&gt;
&lt;br /&gt;
    var body = { message: message };&lt;br /&gt;
    if (conversationId) {&lt;br /&gt;
      body.conversation_id = conversationId;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var url = location.protocol + &#039;//&#039; + apiHost + &#039;/chat&#039;;&lt;br /&gt;
&lt;br /&gt;
    fetch(url, {&lt;br /&gt;
      method: &#039;POST&#039;,&lt;br /&gt;
      headers: { &#039;Content-Type&#039;: &#039;application/json&#039; },&lt;br /&gt;
      body: JSON.stringify(body)&lt;br /&gt;
    })&lt;br /&gt;
      .then(function(res) {&lt;br /&gt;
        if (!res.ok) {&lt;br /&gt;
          return res.json().then(function(data) {&lt;br /&gt;
            throw new Error(data.detail || &#039;HTTP &#039; + res.status);&lt;br /&gt;
          });&lt;br /&gt;
        }&lt;br /&gt;
        return res.json();&lt;br /&gt;
      })&lt;br /&gt;
      .then(function(data) {&lt;br /&gt;
        setLoading(false);&lt;br /&gt;
        conversationId = data.conversation_id;&lt;br /&gt;
        addAssistantMessage(data.answer);&lt;br /&gt;
        renderSources(data.sources);&lt;br /&gt;
        updateStatus(data.remaining_followups);&lt;br /&gt;
        input.focus();&lt;br /&gt;
      })&lt;br /&gt;
      .catch(function(err) {&lt;br /&gt;
        setLoading(false);&lt;br /&gt;
        addError(&#039;Fehler: &#039; + err.message);&lt;br /&gt;
        input.focus();&lt;br /&gt;
      });&lt;br /&gt;
  });&lt;br /&gt;
})();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Ankommen-Bildung&amp;diff=1117</id>
		<title>Ankommen-Bildung</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Ankommen-Bildung&amp;diff=1117"/>
		<updated>2026-05-05T13:58:14Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#widget:StartseitenSuche}}&lt;br /&gt;
&lt;br /&gt;
== Bildung und Anerkennung ==&lt;br /&gt;
&lt;br /&gt;
=== Bildung im Bildungssystem in Münster ===  &lt;br /&gt;
In Münster wird das Bildungssystem durch das Schulamt koordiniert, das verschiedene Schulen unterstützt und die Schulangebote sowie deren Qualität gewährleistet. Weitere Details finden sich auf der Webseite des [https://www.stadt-muenster.de/schulamt/startseite Schulamts Münster].&lt;br /&gt;
&lt;br /&gt;
Des Weiteren spielen Bildungseinrichtungen eine zentrale Rolle bei der Förderung von Jugendlichen und Erwachsenen.&lt;br /&gt;
&lt;br /&gt;
=== Anerkennung von Bildungsabschlüssen ===  &lt;br /&gt;
Die Anerkennung ausländischer Bildungsabschlüsse ist ein wichtiger Schritt für Menschen, die in Deutschland arbeiten oder studieren möchten. Weitere Informationen zur [https://www.stadt-muenster.de/aufenthaltsrecht/berufsanerkennung Berufsanerkennung Münster].&lt;br /&gt;
&lt;br /&gt;
Dieser Prozess ist entscheidend, um gleiche Chancen auf dem deutschen Arbeitsmarkt zu gewährleisten.&lt;br /&gt;
&lt;br /&gt;
=== Unterstützung durch die Bezirksregierung Münster ===  &lt;br /&gt;
Die Bezirksregierung Münster bietet ebenfalls Unterstützung bei der Anerkennung von ausländischen Bildungsnachweisen. Weitere Informationen sind auf der Seite der [https://www.bezreg-muenster.de/de/schule_und_bildung/schulrecht_schulorganisation_abschluesse_sprachen/anerkennung_von_bildungs_und_berufsnachweisen/auslaendische_bildungsnachweise/index.html Bezirksregierung Münster zur Anerkennung von Bildungsnachweisen] zu finden.&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Ankommen-Bildung&amp;diff=1116</id>
		<title>Ankommen-Bildung</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Ankommen-Bildung&amp;diff=1116"/>
		<updated>2026-05-05T13:57:48Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{widet:StartseitenSuche}}&lt;br /&gt;
&lt;br /&gt;
== Bildung und Anerkennung ==&lt;br /&gt;
&lt;br /&gt;
=== Bildung im Bildungssystem in Münster ===  &lt;br /&gt;
In Münster wird das Bildungssystem durch das Schulamt koordiniert, das verschiedene Schulen unterstützt und die Schulangebote sowie deren Qualität gewährleistet. Weitere Details finden sich auf der Webseite des [https://www.stadt-muenster.de/schulamt/startseite Schulamts Münster].&lt;br /&gt;
&lt;br /&gt;
Des Weiteren spielen Bildungseinrichtungen eine zentrale Rolle bei der Förderung von Jugendlichen und Erwachsenen.&lt;br /&gt;
&lt;br /&gt;
=== Anerkennung von Bildungsabschlüssen ===  &lt;br /&gt;
Die Anerkennung ausländischer Bildungsabschlüsse ist ein wichtiger Schritt für Menschen, die in Deutschland arbeiten oder studieren möchten. Weitere Informationen zur [https://www.stadt-muenster.de/aufenthaltsrecht/berufsanerkennung Berufsanerkennung Münster].&lt;br /&gt;
&lt;br /&gt;
Dieser Prozess ist entscheidend, um gleiche Chancen auf dem deutschen Arbeitsmarkt zu gewährleisten.&lt;br /&gt;
&lt;br /&gt;
=== Unterstützung durch die Bezirksregierung Münster ===  &lt;br /&gt;
Die Bezirksregierung Münster bietet ebenfalls Unterstützung bei der Anerkennung von ausländischen Bildungsnachweisen. Weitere Informationen sind auf der Seite der [https://www.bezreg-muenster.de/de/schule_und_bildung/schulrecht_schulorganisation_abschluesse_sprachen/anerkennung_von_bildungs_und_berufsnachweisen/auslaendische_bildungsnachweise/index.html Bezirksregierung Münster zur Anerkennung von Bildungsnachweisen] zu finden.&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Hauptseite&amp;diff=1115</id>
		<title>Hauptseite</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Hauptseite&amp;diff=1115"/>
		<updated>2026-05-05T13:55:29Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Willkommen in Münster==&lt;br /&gt;
Münster4you ist eine Plattform, die allen Menschen in Münster ermöglicht, Informationen schnell und unkompliziert abzurufen. Mit der Integration einer künstlichen Intelligenz, ähnlich wie eine Chat-Funktion, können alle Fragen stellen und erhalten Antworten für Münster, gleichzeitig findet sich neues und altbekanntes Wissen strukturiert aufbereitet.&lt;br /&gt;
&lt;br /&gt;
{{#widget:ChatBox}}&lt;br /&gt;
&lt;br /&gt;
== Bereiche dieser Seite ==&lt;br /&gt;
{{#widget:StartseitenBild|bildUrl=/w/images/6/64/Pexels-cottonbro-5137967.jpeg|link=Ankommen|text=Ankommen in Münster}}&lt;br /&gt;
&lt;br /&gt;
{{#widget:StartseitenBild|bildUrl=/w/images/f/f8/Aasee-Herbst-03-Philipp-Foelting-CC-BY-SA.jpg|link=Freizeit|text=Die funtastische Landingpage &amp;quot;Freizeit &amp;amp; Socializing&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
{{#widget:StartseitenBild|bildUrl=/w/images/c/c2/Münster_oben.jpg|link=Stadtteile|text=Stadtteil-Infoseiten}}&lt;br /&gt;
&lt;br /&gt;
== Karte von Münster == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;display_map height=&amp;quot;300px&amp;quot; scrollwheelzoom=&amp;quot;off&amp;quot; service=&amp;quot;leaflet&amp;quot;&amp;gt;&lt;br /&gt;
  Münster, Germany~Die Stadt Münster~Mein schönes Münster~ ~ ~Münster&lt;br /&gt;
  Mauritz-Lindenweg 95, 48145 Münster~Münster 08~Bester Sportverein~ ~ ~Münster 08&lt;br /&gt;
&amp;lt;/display_map&amp;gt;&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Widget:StartseitenSuche&amp;diff=1114</id>
		<title>Widget:StartseitenSuche</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Widget:StartseitenSuche&amp;diff=1114"/>
		<updated>2026-05-05T13:47:53Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;overlay-container&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;overlay-content&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;chat-widget&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div id=&amp;quot;chat-messages&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div id=&amp;quot;chat-sources-panel&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;form id=&amp;quot;chat-form&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;chat-input&amp;quot; placeholder=&amp;quot;Stelle mir deine Frage …&amp;quot; autocomplete=&amp;quot;off&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;button type=&amp;quot;submit&amp;quot; id=&amp;quot;chat-send&amp;quot;&amp;gt;Fragen&amp;lt;/button&amp;gt;&lt;br /&gt;
      &amp;lt;/form&amp;gt;&lt;br /&gt;
      &amp;lt;div id=&amp;quot;chat-footer&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;span id=&amp;quot;chat-status&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;button id=&amp;quot;chat-new&amp;quot; type=&amp;quot;button&amp;quot;&amp;gt;Neue Unterhaltung&amp;lt;/button&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.overlay-container {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  min-height: 400px;&lt;br /&gt;
  padding: 24px;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  border-radius: 12px;&lt;br /&gt;
  background-color: #2f3e46;&lt;br /&gt;
  background-image: url(&amp;quot;/w/images/a/a9/Schloss-Muenster-Philipp-Foelting-CC-BY-SA.jpg&amp;quot;);&lt;br /&gt;
  background-size: cover;&lt;br /&gt;
  background-position: center;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.overlay-container::before {&lt;br /&gt;
  content: &amp;quot;&amp;quot;;&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  inset: 0;&lt;br /&gt;
  background: rgba(0, 0, 0, 0.38);&lt;br /&gt;
  z-index: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.overlay-content {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  z-index: 2;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  max-width: 860px;&lt;br /&gt;
  padding: 20px;&lt;br /&gt;
  border-radius: 12px;&lt;br /&gt;
  background: rgba(255, 255, 255, 0.92);&lt;br /&gt;
  backdrop-filter: blur(4px);&lt;br /&gt;
  -webkit-backdrop-filter: blur(4px);&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-widget {&lt;br /&gt;
  width: 80%;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  font-family: -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-messages {&lt;br /&gt;
  min-height: 120px;&lt;br /&gt;
  max-height: 500px;&lt;br /&gt;
  overflow-y: auto;&lt;br /&gt;
  padding: 8px 0;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-messages:empty::before {&lt;br /&gt;
  content: &amp;quot;Stelle eine Frage und erhalte Antworten basierend auf dem Münster Wiki und asugewählten Web-Inhalten für Münster. Beachte: KI-Suche kann Fehler machen. Prüfe deine Ergebnisse sorgfältig. Verwende keine personenbezogenen Daten.&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  color: #666;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  padding: 40px 16px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg {&lt;br /&gt;
  max-width: 85%;&lt;br /&gt;
  padding: 10px 14px;&lt;br /&gt;
  border-radius: 10px;&lt;br /&gt;
  font-size: 14.5px;&lt;br /&gt;
  line-height: 1.55;&lt;br /&gt;
  word-wrap: break-word;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-user {&lt;br /&gt;
  align-self: flex-end;&lt;br /&gt;
  background: #00308D;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  border-bottom-right-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-assistant {&lt;br /&gt;
  align-self: flex-start;&lt;br /&gt;
  background: #f0f2f5;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  border-bottom-left-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-assistant p {&lt;br /&gt;
  margin: 0 0 8px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-assistant p:last-child {&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@keyframes chatDots {&lt;br /&gt;
  0%, 80%, 100% { opacity: 0.3; }&lt;br /&gt;
  40% { opacity: 1; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-loading-dots span {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  width: 7px;&lt;br /&gt;
  height: 7px;&lt;br /&gt;
  margin: 0 2px;&lt;br /&gt;
  background: #999;&lt;br /&gt;
  border-radius: 50%;&lt;br /&gt;
  animation: chatDots 1.2s ease-in-out infinite;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-loading-dots span:nth-child(2) { animation-delay: 0.15s; }&lt;br /&gt;
.chat-loading-dots span:nth-child(3) { animation-delay: 0.3s; }&lt;br /&gt;
&lt;br /&gt;
#chat-sources-panel {&lt;br /&gt;
  display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-sources-panel.visible {&lt;br /&gt;
  display: block;&lt;br /&gt;
  margin: 4px 0 8px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-sources-toggle {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: 1px solid #ddd;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  padding: 6px 12px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-sources-toggle:hover {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-sources-list {&lt;br /&gt;
  display: none;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-sources-list.open {&lt;br /&gt;
  display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item {&lt;br /&gt;
  padding: 10px 12px;&lt;br /&gt;
  margin-bottom: 6px;&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  transition: border-color 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item:hover {&lt;br /&gt;
  border-color: #b0b8c1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item h5 {&lt;br /&gt;
  margin: 0 0 3px 0;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item h5 a {&lt;br /&gt;
  color: #00308D;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item h5 a:hover {&lt;br /&gt;
  text-decoration: underline;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item .chat-source-snippet {&lt;br /&gt;
  font-size: 12.5px;&lt;br /&gt;
  line-height: 1.45;&lt;br /&gt;
  color: #666;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item .chat-source-meta {&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  color: #999;&lt;br /&gt;
  margin-top: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-form {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-input {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  padding: 10px 14px;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  border: 1px solid #ccc;&lt;br /&gt;
  border-right: none;&lt;br /&gt;
  border-radius: 4px 0 0 4px;&lt;br /&gt;
  outline: none;&lt;br /&gt;
  transition: border-color 0.2s;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  min-width: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-input:focus {&lt;br /&gt;
  border-color: #4CAF50;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-input:disabled {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
  color: #999;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-send {&lt;br /&gt;
  padding: 10px 20px;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  background: #4CAF50;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-radius: 0 4px 4px 0;&lt;br /&gt;
  transition: background 0.2s;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-send:hover {&lt;br /&gt;
  background: #43A047;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-send:disabled {&lt;br /&gt;
  background: #a5d6a7;&lt;br /&gt;
  cursor: not-allowed;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-footer {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: space-between;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
  min-height: 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-status {&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #666;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-new {&lt;br /&gt;
  display: none;&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: 1px solid #ccc;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  padding: 4px 12px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-new:hover {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-new.visible {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-error {&lt;br /&gt;
  align-self: center;&lt;br /&gt;
  background: #fef2f2;&lt;br /&gt;
  color: #b00;&lt;br /&gt;
  border: 1px solid #fca5a5;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  padding: 8px 14px;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Tablet */&lt;br /&gt;
@media (max-width: 900px) {&lt;br /&gt;
  .overlay-container {&lt;br /&gt;
    min-height: 340px;&lt;br /&gt;
    padding: 18px;&lt;br /&gt;
    border-radius: 10px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .overlay-content {&lt;br /&gt;
    padding: 16px;&lt;br /&gt;
    border-radius: 10px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Smartphone */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
  .overlay-container {&lt;br /&gt;
    min-height: 280px;&lt;br /&gt;
    padding: 12px;&lt;br /&gt;
    align-items: stretch;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .overlay-content {&lt;br /&gt;
    padding: 14px;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-form {&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    gap: 8px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-input {&lt;br /&gt;
    border-right: 1px solid #ccc;&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-send {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .chat-msg {&lt;br /&gt;
    max-width: 100%;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-footer {&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Kleine Smartphones */&lt;br /&gt;
@media (max-width: 400px) {&lt;br /&gt;
  .overlay-container {&lt;br /&gt;
    min-height: 240px;&lt;br /&gt;
    padding: 10px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .overlay-content {&lt;br /&gt;
    padding: 12px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-messages {&lt;br /&gt;
    max-height: 420px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .chat-msg {&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
    padding: 9px 12px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function() {&lt;br /&gt;
  var form = document.getElementById(&#039;chat-form&#039;);&lt;br /&gt;
  var input = document.getElementById(&#039;chat-input&#039;);&lt;br /&gt;
  var sendBtn = document.getElementById(&#039;chat-send&#039;);&lt;br /&gt;
  var messagesEl = document.getElementById(&#039;chat-messages&#039;);&lt;br /&gt;
  var sourcesPanel = document.getElementById(&#039;chat-sources-panel&#039;);&lt;br /&gt;
  var statusEl = document.getElementById(&#039;chat-status&#039;);&lt;br /&gt;
  var newBtn = document.getElementById(&#039;chat-new&#039;);&lt;br /&gt;
  var apiHost = &#039;api.&#039; + location.hostname.split(&#039;.&#039;).slice(1).join(&#039;.&#039;);&lt;br /&gt;
&lt;br /&gt;
  var conversationId = null;&lt;br /&gt;
  var isLoading = false;&lt;br /&gt;
&lt;br /&gt;
  function escapeHtml(str) {&lt;br /&gt;
    var d = document.createElement(&#039;div&#039;);&lt;br /&gt;
    d.textContent = str;&lt;br /&gt;
    return d.innerHTML;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function truncate(str, len) {&lt;br /&gt;
    if (str.length &amp;lt;= len) return str;&lt;br /&gt;
    return str.substring(0, len).replace(/\\s+\\S*$/, &#039;&#039;) + &#039;\\u2026&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function formatAnswer(text) {&lt;br /&gt;
    var html = escapeHtml(text);&lt;br /&gt;
    html = html.replace(/\\*\\*(.+?)\\*\\*/g, &#039;&amp;lt;strong&amp;gt;$1&amp;lt;/strong&amp;gt;&#039;);&lt;br /&gt;
    var paragraphs = html.split(/\\n{2,}/);&lt;br /&gt;
    if (paragraphs.length &amp;gt; 1) {&lt;br /&gt;
      html = paragraphs.map(function(p) { return &#039;&amp;lt;p&amp;gt;&#039; + p.replace(/\\n/g, &#039;&amp;lt;br&amp;gt;&#039;) + &#039;&amp;lt;/p&amp;gt;&#039;; }).join(&#039;&#039;);&lt;br /&gt;
    } else {&lt;br /&gt;
      html = html.replace(/\\n/g, &#039;&amp;lt;br&amp;gt;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    return html;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addUserMessage(text) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-user&#039;;&lt;br /&gt;
    div.textContent = text;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addAssistantMessage(text) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-assistant&#039;;&lt;br /&gt;
    div.innerHTML = formatAnswer(text);&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addLoadingIndicator() {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-assistant chat-loading-dots&#039;;&lt;br /&gt;
    div.id = &#039;chat-loading&#039;;&lt;br /&gt;
    div.innerHTML = &#039;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function removeLoadingIndicator() {&lt;br /&gt;
    var el = document.getElementById(&#039;chat-loading&#039;);&lt;br /&gt;
    if (el) el.remove();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addError(msg) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-error&#039;;&lt;br /&gt;
    div.textContent = msg;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function scrollToBottom() {&lt;br /&gt;
    messagesEl.scrollTop = messagesEl.scrollHeight;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function renderSources(sources) {&lt;br /&gt;
    if (!sources || sources.length === 0) {&lt;br /&gt;
      sourcesPanel.className = &#039;&#039;;&lt;br /&gt;
      sourcesPanel.innerHTML = &#039;&#039;;&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    sourcesPanel.className = &#039;visible&#039;;&lt;br /&gt;
    var listId = &#039;src-list-&#039; + Date.now();&lt;br /&gt;
    var html = &#039;&amp;lt;button class=&amp;quot;chat-sources-toggle&amp;quot; onclick=&amp;quot;var l=document.getElementById(\\&#039;&#039; + listId + &#039;\\&#039;);l.classList.toggle(\\&#039;open\\&#039;);this.textContent=l.classList.contains(\\&#039;open\\&#039;)?\\&#039;▲ Quellen verbergen\\&#039;:\\&#039;▼ &#039; + sources.length + &#039; Quellen anzeigen\\&#039;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
      + &#039;▼ &#039; + sources.length + &#039; Quellen anzeigen&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
    html += &#039;&amp;lt;div class=&amp;quot;chat-sources-list&amp;quot; id=&amp;quot;&#039; + listId + &#039;&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
    sources.forEach(function(s) {&lt;br /&gt;
      var pct = Math.round((s.similarity_score || 0) * 100);&lt;br /&gt;
      var wikiUrl = &#039;/wiki/&#039; + encodeURIComponent((s.page_title || &#039;&#039;).replace(/ /g, &#039;_&#039;));&lt;br /&gt;
      html += &#039;&amp;lt;div class=&amp;quot;chat-source-item&amp;quot;&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;h5&amp;gt;&amp;lt;a href=&amp;quot;&#039; + wikiUrl + &#039;&amp;quot;&amp;gt;&#039; + escapeHtml(s.page_title || &#039;&#039;) + &#039;&amp;lt;/a&amp;gt;&amp;lt;/h5&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;p class=&amp;quot;chat-source-snippet&amp;quot;&amp;gt;&#039; + escapeHtml(truncate(s.content_text || &#039;&#039;, 150)) + &#039;&amp;lt;/p&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;div class=&amp;quot;chat-source-meta&amp;quot;&amp;gt;Relevanz: &#039; + pct + &#039;% · &#039; + escapeHtml(s.source || &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    });&lt;br /&gt;
    html += &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    sourcesPanel.innerHTML = html;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function setLoading(loading) {&lt;br /&gt;
    isLoading = loading;&lt;br /&gt;
    input.disabled = loading;&lt;br /&gt;
    sendBtn.disabled = loading;&lt;br /&gt;
    if (loading) {&lt;br /&gt;
      addLoadingIndicator();&lt;br /&gt;
    } else {&lt;br /&gt;
      removeLoadingIndicator();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function updateStatus(remaining) {&lt;br /&gt;
    if (remaining &amp;gt; 0) {&lt;br /&gt;
      statusEl.textContent = remaining + &#039; R\\u00fcckfrage&#039; + (remaining !== 1 ? &#039;n&#039; : &#039;&#039;) + &#039; verbleibend&#039;;&lt;br /&gt;
    } else if (remaining === 0) {&lt;br /&gt;
      if (conversationId) {&lt;br /&gt;
        statusEl.textContent = &#039;Keine R\\u00fcckfragen mehr m\\u00f6glich&#039;;&lt;br /&gt;
        input.disabled = true;&lt;br /&gt;
        sendBtn.disabled = true;&lt;br /&gt;
        input.placeholder = &#039;Starte eine neue Unterhaltung&#039;;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    newBtn.className = conversationId ? &#039;visible&#039; : &#039;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function resetConversation() {&lt;br /&gt;
    conversationId = null;&lt;br /&gt;
    messagesEl.innerHTML = &#039;&#039;;&lt;br /&gt;
    sourcesPanel.className = &#039;&#039;;&lt;br /&gt;
    sourcesPanel.innerHTML = &#039;&#039;;&lt;br /&gt;
    statusEl.textContent = &#039;&#039;;&lt;br /&gt;
    newBtn.className = &#039;&#039;;&lt;br /&gt;
    input.disabled = false;&lt;br /&gt;
    sendBtn.disabled = false;&lt;br /&gt;
    input.placeholder = &#039;Stelle eine Frage \\u00fcber M\\u00fcnster \\u2026&#039;;&lt;br /&gt;
    input.focus();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  newBtn.addEventListener(&#039;click&#039;, resetConversation);&lt;br /&gt;
&lt;br /&gt;
  form.addEventListener(&#039;submit&#039;, function(e) {&lt;br /&gt;
    e.preventDefault();&lt;br /&gt;
    if (isLoading) return;&lt;br /&gt;
    var message = input.value.trim();&lt;br /&gt;
    if (!message) return;&lt;br /&gt;
&lt;br /&gt;
    input.value = &#039;&#039;;&lt;br /&gt;
    addUserMessage(message);&lt;br /&gt;
    setLoading(true);&lt;br /&gt;
&lt;br /&gt;
    var body = { message: message };&lt;br /&gt;
    if (conversationId) {&lt;br /&gt;
      body.conversation_id = conversationId;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var url = location.protocol + &#039;//&#039; + apiHost + &#039;/chat&#039;;&lt;br /&gt;
&lt;br /&gt;
    fetch(url, {&lt;br /&gt;
      method: &#039;POST&#039;,&lt;br /&gt;
      headers: { &#039;Content-Type&#039;: &#039;application/json&#039; },&lt;br /&gt;
      body: JSON.stringify(body)&lt;br /&gt;
    })&lt;br /&gt;
      .then(function(res) {&lt;br /&gt;
        if (!res.ok) {&lt;br /&gt;
          return res.json().then(function(data) {&lt;br /&gt;
            throw new Error(data.detail || &#039;HTTP &#039; + res.status);&lt;br /&gt;
          });&lt;br /&gt;
        }&lt;br /&gt;
        return res.json();&lt;br /&gt;
      })&lt;br /&gt;
      .then(function(data) {&lt;br /&gt;
        setLoading(false);&lt;br /&gt;
        conversationId = data.conversation_id;&lt;br /&gt;
        addAssistantMessage(data.answer);&lt;br /&gt;
        renderSources(data.sources);&lt;br /&gt;
        updateStatus(data.remaining_followups);&lt;br /&gt;
        input.focus();&lt;br /&gt;
      })&lt;br /&gt;
      .catch(function(err) {&lt;br /&gt;
        setLoading(false);&lt;br /&gt;
        addError(&#039;Fehler: &#039; + err.message);&lt;br /&gt;
        input.focus();&lt;br /&gt;
      });&lt;br /&gt;
  });&lt;br /&gt;
})();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Widget:StartseitenSuche&amp;diff=1113</id>
		<title>Widget:StartseitenSuche</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Widget:StartseitenSuche&amp;diff=1113"/>
		<updated>2026-05-05T13:46:37Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;overlay-container&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;overlay-content&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;chat-widget&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div id=&amp;quot;chat-messages&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div id=&amp;quot;chat-sources-panel&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;form id=&amp;quot;chat-form&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;chat-input&amp;quot; placeholder=&amp;quot;Stelle mir deine Frage …&amp;quot; autocomplete=&amp;quot;off&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;button type=&amp;quot;submit&amp;quot; id=&amp;quot;chat-send&amp;quot;&amp;gt;Fragen&amp;lt;/button&amp;gt;&lt;br /&gt;
      &amp;lt;/form&amp;gt;&lt;br /&gt;
      &amp;lt;div id=&amp;quot;chat-footer&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;span id=&amp;quot;chat-status&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;button id=&amp;quot;chat-new&amp;quot; type=&amp;quot;button&amp;quot;&amp;gt;Neue Unterhaltung&amp;lt;/button&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.overlay-container {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  min-height: 300px;&lt;br /&gt;
  padding: 24px;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  border-radius: 12px;&lt;br /&gt;
  background-color: #2f3e46;&lt;br /&gt;
  background-image: url(&amp;quot;/w/images/a/a9/Schloss-Muenster-Philipp-Foelting-CC-BY-SA.jpg&amp;quot;);&lt;br /&gt;
  background-size: cover;&lt;br /&gt;
  background-position: center;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.overlay-container::before {&lt;br /&gt;
  content: &amp;quot;&amp;quot;;&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  inset: 0;&lt;br /&gt;
  background: rgba(0, 0, 0, 0.38);&lt;br /&gt;
  z-index: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.overlay-content {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  z-index: 2;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  max-width: 860px;&lt;br /&gt;
  padding: 20px;&lt;br /&gt;
  border-radius: 12px;&lt;br /&gt;
  background: rgba(255, 255, 255, 0.92);&lt;br /&gt;
  backdrop-filter: blur(4px);&lt;br /&gt;
  -webkit-backdrop-filter: blur(4px);&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-widget {&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  font-family: -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-messages {&lt;br /&gt;
  min-height: 120px;&lt;br /&gt;
  max-height: 500px;&lt;br /&gt;
  overflow-y: auto;&lt;br /&gt;
  padding: 8px 0;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-messages:empty::before {&lt;br /&gt;
  content: &amp;quot;Stelle eine Frage und erhalte Antworten basierend auf dem Münster Wiki und asugewählten Web-Inhalten für Münster. Beachte: KI-Suche kann Fehler machen. Prüfe deine Ergebnisse sorgfältig. Verwende keine personenbezogenen Daten.&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  color: #666;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  padding: 40px 16px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg {&lt;br /&gt;
  max-width: 85%;&lt;br /&gt;
  padding: 10px 14px;&lt;br /&gt;
  border-radius: 10px;&lt;br /&gt;
  font-size: 14.5px;&lt;br /&gt;
  line-height: 1.55;&lt;br /&gt;
  word-wrap: break-word;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-user {&lt;br /&gt;
  align-self: flex-end;&lt;br /&gt;
  background: #00308D;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  border-bottom-right-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-assistant {&lt;br /&gt;
  align-self: flex-start;&lt;br /&gt;
  background: #f0f2f5;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  border-bottom-left-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-assistant p {&lt;br /&gt;
  margin: 0 0 8px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-assistant p:last-child {&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@keyframes chatDots {&lt;br /&gt;
  0%, 80%, 100% { opacity: 0.3; }&lt;br /&gt;
  40% { opacity: 1; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-loading-dots span {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  width: 7px;&lt;br /&gt;
  height: 7px;&lt;br /&gt;
  margin: 0 2px;&lt;br /&gt;
  background: #999;&lt;br /&gt;
  border-radius: 50%;&lt;br /&gt;
  animation: chatDots 1.2s ease-in-out infinite;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-loading-dots span:nth-child(2) { animation-delay: 0.15s; }&lt;br /&gt;
.chat-loading-dots span:nth-child(3) { animation-delay: 0.3s; }&lt;br /&gt;
&lt;br /&gt;
#chat-sources-panel {&lt;br /&gt;
  display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-sources-panel.visible {&lt;br /&gt;
  display: block;&lt;br /&gt;
  margin: 4px 0 8px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-sources-toggle {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: 1px solid #ddd;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  padding: 6px 12px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-sources-toggle:hover {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-sources-list {&lt;br /&gt;
  display: none;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-sources-list.open {&lt;br /&gt;
  display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item {&lt;br /&gt;
  padding: 10px 12px;&lt;br /&gt;
  margin-bottom: 6px;&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  transition: border-color 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item:hover {&lt;br /&gt;
  border-color: #b0b8c1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item h5 {&lt;br /&gt;
  margin: 0 0 3px 0;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item h5 a {&lt;br /&gt;
  color: #00308D;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item h5 a:hover {&lt;br /&gt;
  text-decoration: underline;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item .chat-source-snippet {&lt;br /&gt;
  font-size: 12.5px;&lt;br /&gt;
  line-height: 1.45;&lt;br /&gt;
  color: #666;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item .chat-source-meta {&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  color: #999;&lt;br /&gt;
  margin-top: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-form {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-input {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  padding: 10px 14px;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  border: 1px solid #ccc;&lt;br /&gt;
  border-right: none;&lt;br /&gt;
  border-radius: 4px 0 0 4px;&lt;br /&gt;
  outline: none;&lt;br /&gt;
  transition: border-color 0.2s;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  min-width: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-input:focus {&lt;br /&gt;
  border-color: #4CAF50;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-input:disabled {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
  color: #999;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-send {&lt;br /&gt;
  padding: 10px 20px;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  background: #4CAF50;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-radius: 0 4px 4px 0;&lt;br /&gt;
  transition: background 0.2s;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-send:hover {&lt;br /&gt;
  background: #43A047;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-send:disabled {&lt;br /&gt;
  background: #a5d6a7;&lt;br /&gt;
  cursor: not-allowed;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-footer {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: space-between;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
  min-height: 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-status {&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #666;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-new {&lt;br /&gt;
  display: none;&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: 1px solid #ccc;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  padding: 4px 12px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-new:hover {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-new.visible {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-error {&lt;br /&gt;
  align-self: center;&lt;br /&gt;
  background: #fef2f2;&lt;br /&gt;
  color: #b00;&lt;br /&gt;
  border: 1px solid #fca5a5;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  padding: 8px 14px;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Tablet */&lt;br /&gt;
@media (max-width: 900px) {&lt;br /&gt;
  .overlay-container {&lt;br /&gt;
    min-height: 340px;&lt;br /&gt;
    padding: 18px;&lt;br /&gt;
    border-radius: 10px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .overlay-content {&lt;br /&gt;
    padding: 16px;&lt;br /&gt;
    border-radius: 10px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Smartphone */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
  .overlay-container {&lt;br /&gt;
    min-height: 280px;&lt;br /&gt;
    padding: 12px;&lt;br /&gt;
    align-items: stretch;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .overlay-content {&lt;br /&gt;
    padding: 14px;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-form {&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    gap: 8px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-input {&lt;br /&gt;
    border-right: 1px solid #ccc;&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-send {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .chat-msg {&lt;br /&gt;
    max-width: 100%;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-footer {&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Kleine Smartphones */&lt;br /&gt;
@media (max-width: 400px) {&lt;br /&gt;
  .overlay-container {&lt;br /&gt;
    min-height: 240px;&lt;br /&gt;
    padding: 10px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .overlay-content {&lt;br /&gt;
    padding: 12px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-messages {&lt;br /&gt;
    max-height: 420px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .chat-msg {&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
    padding: 9px 12px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function() {&lt;br /&gt;
  var form = document.getElementById(&#039;chat-form&#039;);&lt;br /&gt;
  var input = document.getElementById(&#039;chat-input&#039;);&lt;br /&gt;
  var sendBtn = document.getElementById(&#039;chat-send&#039;);&lt;br /&gt;
  var messagesEl = document.getElementById(&#039;chat-messages&#039;);&lt;br /&gt;
  var sourcesPanel = document.getElementById(&#039;chat-sources-panel&#039;);&lt;br /&gt;
  var statusEl = document.getElementById(&#039;chat-status&#039;);&lt;br /&gt;
  var newBtn = document.getElementById(&#039;chat-new&#039;);&lt;br /&gt;
  var apiHost = &#039;api.&#039; + location.hostname.split(&#039;.&#039;).slice(1).join(&#039;.&#039;);&lt;br /&gt;
&lt;br /&gt;
  var conversationId = null;&lt;br /&gt;
  var isLoading = false;&lt;br /&gt;
&lt;br /&gt;
  function escapeHtml(str) {&lt;br /&gt;
    var d = document.createElement(&#039;div&#039;);&lt;br /&gt;
    d.textContent = str;&lt;br /&gt;
    return d.innerHTML;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function truncate(str, len) {&lt;br /&gt;
    if (str.length &amp;lt;= len) return str;&lt;br /&gt;
    return str.substring(0, len).replace(/\\s+\\S*$/, &#039;&#039;) + &#039;\\u2026&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function formatAnswer(text) {&lt;br /&gt;
    var html = escapeHtml(text);&lt;br /&gt;
    html = html.replace(/\\*\\*(.+?)\\*\\*/g, &#039;&amp;lt;strong&amp;gt;$1&amp;lt;/strong&amp;gt;&#039;);&lt;br /&gt;
    var paragraphs = html.split(/\\n{2,}/);&lt;br /&gt;
    if (paragraphs.length &amp;gt; 1) {&lt;br /&gt;
      html = paragraphs.map(function(p) { return &#039;&amp;lt;p&amp;gt;&#039; + p.replace(/\\n/g, &#039;&amp;lt;br&amp;gt;&#039;) + &#039;&amp;lt;/p&amp;gt;&#039;; }).join(&#039;&#039;);&lt;br /&gt;
    } else {&lt;br /&gt;
      html = html.replace(/\\n/g, &#039;&amp;lt;br&amp;gt;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    return html;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addUserMessage(text) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-user&#039;;&lt;br /&gt;
    div.textContent = text;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addAssistantMessage(text) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-assistant&#039;;&lt;br /&gt;
    div.innerHTML = formatAnswer(text);&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addLoadingIndicator() {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-assistant chat-loading-dots&#039;;&lt;br /&gt;
    div.id = &#039;chat-loading&#039;;&lt;br /&gt;
    div.innerHTML = &#039;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function removeLoadingIndicator() {&lt;br /&gt;
    var el = document.getElementById(&#039;chat-loading&#039;);&lt;br /&gt;
    if (el) el.remove();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addError(msg) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-error&#039;;&lt;br /&gt;
    div.textContent = msg;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function scrollToBottom() {&lt;br /&gt;
    messagesEl.scrollTop = messagesEl.scrollHeight;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function renderSources(sources) {&lt;br /&gt;
    if (!sources || sources.length === 0) {&lt;br /&gt;
      sourcesPanel.className = &#039;&#039;;&lt;br /&gt;
      sourcesPanel.innerHTML = &#039;&#039;;&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    sourcesPanel.className = &#039;visible&#039;;&lt;br /&gt;
    var listId = &#039;src-list-&#039; + Date.now();&lt;br /&gt;
    var html = &#039;&amp;lt;button class=&amp;quot;chat-sources-toggle&amp;quot; onclick=&amp;quot;var l=document.getElementById(\\&#039;&#039; + listId + &#039;\\&#039;);l.classList.toggle(\\&#039;open\\&#039;);this.textContent=l.classList.contains(\\&#039;open\\&#039;)?\\&#039;▲ Quellen verbergen\\&#039;:\\&#039;▼ &#039; + sources.length + &#039; Quellen anzeigen\\&#039;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
      + &#039;▼ &#039; + sources.length + &#039; Quellen anzeigen&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
    html += &#039;&amp;lt;div class=&amp;quot;chat-sources-list&amp;quot; id=&amp;quot;&#039; + listId + &#039;&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
    sources.forEach(function(s) {&lt;br /&gt;
      var pct = Math.round((s.similarity_score || 0) * 100);&lt;br /&gt;
      var wikiUrl = &#039;/wiki/&#039; + encodeURIComponent((s.page_title || &#039;&#039;).replace(/ /g, &#039;_&#039;));&lt;br /&gt;
      html += &#039;&amp;lt;div class=&amp;quot;chat-source-item&amp;quot;&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;h5&amp;gt;&amp;lt;a href=&amp;quot;&#039; + wikiUrl + &#039;&amp;quot;&amp;gt;&#039; + escapeHtml(s.page_title || &#039;&#039;) + &#039;&amp;lt;/a&amp;gt;&amp;lt;/h5&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;p class=&amp;quot;chat-source-snippet&amp;quot;&amp;gt;&#039; + escapeHtml(truncate(s.content_text || &#039;&#039;, 150)) + &#039;&amp;lt;/p&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;div class=&amp;quot;chat-source-meta&amp;quot;&amp;gt;Relevanz: &#039; + pct + &#039;% · &#039; + escapeHtml(s.source || &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    });&lt;br /&gt;
    html += &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    sourcesPanel.innerHTML = html;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function setLoading(loading) {&lt;br /&gt;
    isLoading = loading;&lt;br /&gt;
    input.disabled = loading;&lt;br /&gt;
    sendBtn.disabled = loading;&lt;br /&gt;
    if (loading) {&lt;br /&gt;
      addLoadingIndicator();&lt;br /&gt;
    } else {&lt;br /&gt;
      removeLoadingIndicator();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function updateStatus(remaining) {&lt;br /&gt;
    if (remaining &amp;gt; 0) {&lt;br /&gt;
      statusEl.textContent = remaining + &#039; R\\u00fcckfrage&#039; + (remaining !== 1 ? &#039;n&#039; : &#039;&#039;) + &#039; verbleibend&#039;;&lt;br /&gt;
    } else if (remaining === 0) {&lt;br /&gt;
      if (conversationId) {&lt;br /&gt;
        statusEl.textContent = &#039;Keine R\\u00fcckfragen mehr m\\u00f6glich&#039;;&lt;br /&gt;
        input.disabled = true;&lt;br /&gt;
        sendBtn.disabled = true;&lt;br /&gt;
        input.placeholder = &#039;Starte eine neue Unterhaltung&#039;;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    newBtn.className = conversationId ? &#039;visible&#039; : &#039;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function resetConversation() {&lt;br /&gt;
    conversationId = null;&lt;br /&gt;
    messagesEl.innerHTML = &#039;&#039;;&lt;br /&gt;
    sourcesPanel.className = &#039;&#039;;&lt;br /&gt;
    sourcesPanel.innerHTML = &#039;&#039;;&lt;br /&gt;
    statusEl.textContent = &#039;&#039;;&lt;br /&gt;
    newBtn.className = &#039;&#039;;&lt;br /&gt;
    input.disabled = false;&lt;br /&gt;
    sendBtn.disabled = false;&lt;br /&gt;
    input.placeholder = &#039;Stelle eine Frage \\u00fcber M\\u00fcnster \\u2026&#039;;&lt;br /&gt;
    input.focus();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  newBtn.addEventListener(&#039;click&#039;, resetConversation);&lt;br /&gt;
&lt;br /&gt;
  form.addEventListener(&#039;submit&#039;, function(e) {&lt;br /&gt;
    e.preventDefault();&lt;br /&gt;
    if (isLoading) return;&lt;br /&gt;
    var message = input.value.trim();&lt;br /&gt;
    if (!message) return;&lt;br /&gt;
&lt;br /&gt;
    input.value = &#039;&#039;;&lt;br /&gt;
    addUserMessage(message);&lt;br /&gt;
    setLoading(true);&lt;br /&gt;
&lt;br /&gt;
    var body = { message: message };&lt;br /&gt;
    if (conversationId) {&lt;br /&gt;
      body.conversation_id = conversationId;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var url = location.protocol + &#039;//&#039; + apiHost + &#039;/chat&#039;;&lt;br /&gt;
&lt;br /&gt;
    fetch(url, {&lt;br /&gt;
      method: &#039;POST&#039;,&lt;br /&gt;
      headers: { &#039;Content-Type&#039;: &#039;application/json&#039; },&lt;br /&gt;
      body: JSON.stringify(body)&lt;br /&gt;
    })&lt;br /&gt;
      .then(function(res) {&lt;br /&gt;
        if (!res.ok) {&lt;br /&gt;
          return res.json().then(function(data) {&lt;br /&gt;
            throw new Error(data.detail || &#039;HTTP &#039; + res.status);&lt;br /&gt;
          });&lt;br /&gt;
        }&lt;br /&gt;
        return res.json();&lt;br /&gt;
      })&lt;br /&gt;
      .then(function(data) {&lt;br /&gt;
        setLoading(false);&lt;br /&gt;
        conversationId = data.conversation_id;&lt;br /&gt;
        addAssistantMessage(data.answer);&lt;br /&gt;
        renderSources(data.sources);&lt;br /&gt;
        updateStatus(data.remaining_followups);&lt;br /&gt;
        input.focus();&lt;br /&gt;
      })&lt;br /&gt;
      .catch(function(err) {&lt;br /&gt;
        setLoading(false);&lt;br /&gt;
        addError(&#039;Fehler: &#039; + err.message);&lt;br /&gt;
        input.focus();&lt;br /&gt;
      });&lt;br /&gt;
  });&lt;br /&gt;
})();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Ankommen-Wohnen&amp;diff=1112</id>
		<title>Ankommen-Wohnen</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Ankommen-Wohnen&amp;diff=1112"/>
		<updated>2026-05-05T13:43:40Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#widget:StartseitenSuche}}&lt;br /&gt;
&lt;br /&gt;
Münster bietet eine Mischung aus &#039;&#039;&#039;historischen Altbauten&#039;&#039;&#039;, &#039;&#039;&#039;modernen Neubauten&#039;&#039;&#039; und &#039;&#039;&#039;Studierendenwohnungen&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Alle Formen gibt es auch als sozialen Wohnungsbau. Für eine nachhaltige Stadtentwicklung sind Themen des&lt;br /&gt;
&lt;br /&gt;
* energieeffizientes Bauen und &lt;br /&gt;
* grüne Wohnquartiere relevant.&lt;br /&gt;
&lt;br /&gt;
Angebote gibt es auch zur [https://www.stadt-muenster.de/sozialamt/menschen-mit-wohnungsproblemen/wohnbezogene-hilfen Wohnungshilfe für sozial benachteiligte Gruppen]. &lt;br /&gt;
&lt;br /&gt;
{{#Widget:Ankommen-Wohnen}}&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Ankommen-Arbeit&amp;diff=1111</id>
		<title>Ankommen-Arbeit</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Ankommen-Arbeit&amp;diff=1111"/>
		<updated>2026-05-05T13:43:22Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#widget:StartseitenSuche}}&lt;br /&gt;
&lt;br /&gt;
{{#Widget:Ankommen-Arbeit}}&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Ankommen-Aufenthalt&amp;diff=1110</id>
		<title>Ankommen-Aufenthalt</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Ankommen-Aufenthalt&amp;diff=1110"/>
		<updated>2026-05-05T13:43:03Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#widget:StartseitenSuche}}&lt;br /&gt;
&lt;br /&gt;
{{#Widget:Ankommen-Aufenthalt}}&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Ankommen-Wohnen&amp;diff=1109</id>
		<title>Ankommen-Wohnen</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Ankommen-Wohnen&amp;diff=1109"/>
		<updated>2026-05-05T13:37:55Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Münster bietet eine Mischung aus &#039;&#039;&#039;historischen Altbauten&#039;&#039;&#039;, &#039;&#039;&#039;modernen Neubauten&#039;&#039;&#039; und &#039;&#039;&#039;Studierendenwohnungen&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Alle Formen gibt es auch als sozialen Wohnungsbau. Für eine nachhaltige Stadtentwicklung sind Themen des&lt;br /&gt;
&lt;br /&gt;
* energieeffizientes Bauen und &lt;br /&gt;
* grüne Wohnquartiere relevant.&lt;br /&gt;
&lt;br /&gt;
Angebote gibt es auch zur [https://www.stadt-muenster.de/sozialamt/menschen-mit-wohnungsproblemen/wohnbezogene-hilfen Wohnungshilfe für sozial benachteiligte Gruppen]. &lt;br /&gt;
&lt;br /&gt;
{{#Widget:Ankommen-Wohnen}}&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Hauptseite&amp;diff=1108</id>
		<title>Hauptseite</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Hauptseite&amp;diff=1108"/>
		<updated>2026-05-05T13:35:57Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Willkommen in Münster==&lt;br /&gt;
Münster4you ist eine Plattform, die allen Menschen in Münster ermöglicht, Informationen schnell und unkompliziert abzurufen. Mit der Integration einer künstlichen Intelligenz, ähnlich wie eine Chat-Funktion, können alle Fragen stellen und erhalten Antworten für Münster, gleichzeitig findet sich neues und altbekanntes Wissen strukturiert aufbereitet.&lt;br /&gt;
&lt;br /&gt;
{{#widget:StartseitenSuche}}&lt;br /&gt;
&lt;br /&gt;
== Bereiche dieser Seite ==&lt;br /&gt;
{{#widget:StartseitenBild|bildUrl=/w/images/6/64/Pexels-cottonbro-5137967.jpeg|link=Ankommen|text=Ankommen in Münster}}&lt;br /&gt;
&lt;br /&gt;
{{#widget:StartseitenBild|bildUrl=/w/images/f/f8/Aasee-Herbst-03-Philipp-Foelting-CC-BY-SA.jpg|link=Freizeit|text=Die funtastische Landingpage &amp;quot;Freizeit &amp;amp; Socializing&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
{{#widget:StartseitenBild|bildUrl=/w/images/c/c2/Münster_oben.jpg|link=Stadtteile|text=Stadtteil-Infoseiten}}&lt;br /&gt;
&lt;br /&gt;
== Karte von Münster == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;display_map height=&amp;quot;300px&amp;quot; scrollwheelzoom=&amp;quot;off&amp;quot; service=&amp;quot;leaflet&amp;quot;&amp;gt;&lt;br /&gt;
  Münster, Germany~Die Stadt Münster~Mein schönes Münster~ ~ ~Münster&lt;br /&gt;
  Mauritz-Lindenweg 95, 48145 Münster~Münster 08~Bester Sportverein~ ~ ~Münster 08&lt;br /&gt;
&amp;lt;/display_map&amp;gt;&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Freizeit&amp;diff=1107</id>
		<title>Freizeit</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Freizeit&amp;diff=1107"/>
		<updated>2026-05-05T13:35:24Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: /* Beschreibung */ nicht notwendig&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#widget:StartseitenSuche|arg.foo=bar|arg.bar=oni}} &amp;lt;!-- Suchleiste --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Neues in Münster==&lt;br /&gt;
{{#widget:TeaserFreizeit}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Tennis.png|link=Sport|Sport&lt;br /&gt;
File:Schloss.png|link=Sehenswürdigkeiten|Sehenswürdigkeiten&lt;br /&gt;
File:Location.png|link=Location|Coole Locations&lt;br /&gt;
File:Ei.png|link=Hofläden|Hofläden&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Consult the [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents User&#039;s Guide] for information on using the wiki software.&lt;br /&gt;
&lt;br /&gt;
== Karte von Münster == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;display_map height=&amp;quot;300px&amp;quot; scrollwheelzoom=&amp;quot;off&amp;quot; service=&amp;quot;leaflet&amp;quot;&amp;gt;&lt;br /&gt;
  Münster, Germany~Die Stadt Münster~Mein schönes Münster~ ~ ~Münster&lt;br /&gt;
  Mauritz-Lindenweg 95, 48145 Münster~Münster 08~Bester Sportverein~ ~ ~Münster 08&lt;br /&gt;
&amp;lt;/display_map&amp;gt;&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=MediaWiki:Sidebar&amp;diff=1106</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=MediaWiki:Sidebar&amp;diff=1106"/>
		<updated>2026-05-05T13:32:56Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
* navigation&lt;br /&gt;
** Hauptseite|Startseite&lt;br /&gt;
* Ankommen in Münster&lt;br /&gt;
** Ankommen|Startseite &amp;quot;Ankommen&amp;quot;&lt;br /&gt;
** Ankommen-Arbeit|Arbeit &amp;amp; Qualifizierung&lt;br /&gt;
** Ankommen-Aufenthalt|Aufenthalt &amp;amp; Recht&lt;br /&gt;
** Ankommen-Bildung|Bildung  &amp;amp; Anerkennung&lt;br /&gt;
** Ankommen-Gesundheit|Gesundheit &amp;amp; Vorsorge&lt;br /&gt;
** Ankommen-Wohnen|Wohnen &amp;amp; Leben&lt;br /&gt;
* Freizeit &amp;amp; Socializing&lt;br /&gt;
** Freizeit|Startseite Freizeit&lt;br /&gt;
** Aktuelles|Aktuelles&lt;br /&gt;
** Sharing|Give-Boxen &amp;amp; Bücherschränke&lt;br /&gt;
** Sport|Sport&lt;br /&gt;
** Vereine|Vereine&lt;br /&gt;
** Kultur|Kultur&lt;br /&gt;
* Über Münster&lt;br /&gt;
** Sehenswürdigkeiten|Sehenswürdigkeiten&lt;br /&gt;
** Freizeit|Ausflugsziele&lt;br /&gt;
** Umweltschutz und Nachhaltigkeit|Umweltschutz und Nachhaltigkeit&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=MediaWiki:Sidebar&amp;diff=1105</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=MediaWiki:Sidebar&amp;diff=1105"/>
		<updated>2026-05-05T13:28:07Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
* navigation&lt;br /&gt;
** Hauptseite|Startseite&lt;br /&gt;
* Ankommen in Münster&lt;br /&gt;
** Ankommen|Startseite &amp;quot;Ankommen&amp;quot;&lt;br /&gt;
** Ankommen-Arbeit|Arbeit &amp;amp; Qualifizierung&lt;br /&gt;
** Ankommen-Aufenthalt|Aufenthalt &amp;amp; Recht&lt;br /&gt;
** Ankommen-Bildung|Bildung  &amp;amp; Anerkennung&lt;br /&gt;
** Ankommen-Gesundheit|Gesundheit &amp;amp; Vorsorge&lt;br /&gt;
** Ankommen-Wohnen|Wohnen &amp;amp; Leben&lt;br /&gt;
* Freizeit &amp;amp; Socializing&lt;br /&gt;
** Freizeit|Startseite Freizeit&lt;br /&gt;
** Aktuelles|Aktuelles&lt;br /&gt;
** Sharing|Give-Boxen &amp;amp; Bücherschränke&lt;br /&gt;
** Sport|Sport&lt;br /&gt;
** Vereine|Vereine&lt;br /&gt;
** Kultur|Kultur&lt;br /&gt;
* Über Münster&lt;br /&gt;
** Sehenswürdigkeiten|Sehenswürdigkeiten&lt;br /&gt;
** Sicherheit|Sicherheit&lt;br /&gt;
** Soziales|Soziales &lt;br /&gt;
** Umweltschutz und Nachhaltigkeit|Umweltschutz und Nachhaltigkeit&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Wohnen&amp;diff=1104</id>
		<title>Wohnen</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Wohnen&amp;diff=1104"/>
		<updated>2026-05-05T13:23:50Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: Weiterleitung auf Ankommen-Wohnen entfernt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Münster bietet eine Mischung aus&lt;br /&gt;
* historischen Altbauten,&lt;br /&gt;
* modernen Neubauten und&lt;br /&gt;
* Studierendenwohnungen.&lt;br /&gt;
Alle Formen gibt es auch als sozialen Wohnungsbau.&lt;br /&gt;
&lt;br /&gt;
Für eine nachhaltige Stadtentwicklung sind Themen des&lt;br /&gt;
* energieeffizientes Bauen und&lt;br /&gt;
* grüne Wohnquartiere relevant.&lt;br /&gt;
&lt;br /&gt;
Angebote gibt es auch zur Wohnungshilfe für sozial benachteiligte Gruppen.&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Wohnen&amp;diff=1103</id>
		<title>Wohnen</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Wohnen&amp;diff=1103"/>
		<updated>2026-05-05T13:13:52Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: Weiterleitung nach Ankommen-Wohnen erstellt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#WEITERLEITUNG [[Ankommen-Wohnen]]Münster bietet eine Mischung aus&lt;br /&gt;
* historischen Altbauten,&lt;br /&gt;
* modernen Neubauten und&lt;br /&gt;
* Studierendenwohnungen.&lt;br /&gt;
Alle Formen gibt es auch als sozialen Wohnungsbau.&lt;br /&gt;
&lt;br /&gt;
Für eine nachhaltige Stadtentwicklung sind Themen des&lt;br /&gt;
* energieeffizientes Bauen und&lt;br /&gt;
* grüne Wohnquartiere relevant.&lt;br /&gt;
&lt;br /&gt;
Angebote gibt es auch zur Wohnungshilfe für sozial benachteiligte Gruppen.&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Ankommen-Wohnen&amp;diff=1102</id>
		<title>Ankommen-Wohnen</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Ankommen-Wohnen&amp;diff=1102"/>
		<updated>2026-05-05T13:11:43Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Münster bietet eine Mischung aus&lt;br /&gt;
&lt;br /&gt;
* historischen Altbauten,&lt;br /&gt;
* modernen Neubauten und&lt;br /&gt;
* Studierendenwohnungen.&lt;br /&gt;
&lt;br /&gt;
Alle Formen gibt es auch als sozialen Wohnungsbau. Für eine nachhaltige Stadtentwicklung sind Themen des&lt;br /&gt;
&lt;br /&gt;
* energieeffizientes Bauen und &lt;br /&gt;
* grüne Wohnquartiere relevant.&lt;br /&gt;
&lt;br /&gt;
Angebote gibt es auch zur [https://www.stadt-muenster.de/sozialamt/menschen-mit-wohnungsproblemen/wohnbezogene-hilfen Wohnungshilfe für sozial benachteiligte Gruppen]. &lt;br /&gt;
&lt;br /&gt;
{{#Widget:Ankommen-Wohnen}}&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Ankommen-Wohnen&amp;diff=1101</id>
		<title>Ankommen-Wohnen</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Ankommen-Wohnen&amp;diff=1101"/>
		<updated>2026-05-05T13:07:32Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Münster bietet eine Mischung aus&lt;br /&gt;
&lt;br /&gt;
    historischen Altbauten,&lt;br /&gt;
    modernen Neubauten und&lt;br /&gt;
    Studierendenwohnungen.&lt;br /&gt;
&lt;br /&gt;
Alle Formen gibt es auch als sozialen Wohnungsbau.&lt;br /&gt;
&lt;br /&gt;
Für eine nachhaltige Stadtentwicklung sind Themen des&lt;br /&gt;
&lt;br /&gt;
    energieeffizientes Bauen und&lt;br /&gt;
    grüne Wohnquartiere relevant.&lt;br /&gt;
&lt;br /&gt;
Angebote gibt es auch zur Wohnungshilfe für sozial benachteiligte Gruppen. &lt;br /&gt;
&lt;br /&gt;
{{#Widget:Ankommen-Wohnen}}&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=MediaWiki:Sidebar&amp;diff=1100</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=MediaWiki:Sidebar&amp;diff=1100"/>
		<updated>2026-05-05T13:02:25Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
* navigation&lt;br /&gt;
** Hauptseite|Startseite&lt;br /&gt;
* Ankommen in Münster&lt;br /&gt;
** Ankommen|Startseite &amp;quot;Ankommen&amp;quot;&lt;br /&gt;
** Arbeit|Arbeit &amp;amp; Qualifizierung&lt;br /&gt;
** Ankommen-Aufenthalt|Aufenthalt &amp;amp; Recht&lt;br /&gt;
** Ankommen-Bildung|Bildung  &amp;amp; Anerkennung&lt;br /&gt;
** Ankommen-Gesundheit|Gesundheit &amp;amp; Vorsorge&lt;br /&gt;
** Ankommen-Wohnen|Wohnen &amp;amp; Leben&lt;br /&gt;
* Freizeit &amp;amp; Socializing&lt;br /&gt;
** Freizeit|Startseite Freizeit&lt;br /&gt;
** Aktuelles|Aktuelles&lt;br /&gt;
** Sharing|Give-Boxen &amp;amp; Bücherschränke&lt;br /&gt;
** Sport|Sport&lt;br /&gt;
** Vereine|Vereine&lt;br /&gt;
** Kultur|Kultur&lt;br /&gt;
* Über Münster&lt;br /&gt;
** Sehenswürdigkeiten|Sehenswürdigkeiten&lt;br /&gt;
** Sicherheit|Sicherheit&lt;br /&gt;
** Soziales|Soziales &lt;br /&gt;
** Umweltschutz und Nachhaltigkeit|Umwelschutz und Nachhaltigkeit&lt;br /&gt;
** Wohnen|Wohnen&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=MediaWiki:Sidebar&amp;diff=1099</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=MediaWiki:Sidebar&amp;diff=1099"/>
		<updated>2026-05-05T13:01:28Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
* navigation&lt;br /&gt;
** Hauptseite|Startseite&lt;br /&gt;
* Ankommen in Münster&lt;br /&gt;
** Startseite &amp;quot;Ankommen&amp;quot;&lt;br /&gt;
** Ankommen-Arbeit|Arbeit &amp;amp; Qualifizierung&lt;br /&gt;
** Ankommen-Aufenthalt|Aufenthalt &amp;amp; Recht&lt;br /&gt;
** Ankommen-Bildung|Bildung  &amp;amp; Anerkennung&lt;br /&gt;
** Ankommen-Gesundheit|Gesundheit &amp;amp; Vorsorge&lt;br /&gt;
** Ankommen-Wohnen|Wohnen &amp;amp; Leben&lt;br /&gt;
* Freizeit &amp;amp; Socializing&lt;br /&gt;
** Freizeit|Startseite Freizeit&lt;br /&gt;
** Aktuelles|Aktuelles&lt;br /&gt;
** Sharing|Give-Boxen &amp;amp; Bücherschränke&lt;br /&gt;
** Sport|Sport&lt;br /&gt;
** Vereine|Vereine&lt;br /&gt;
** Kultur|Kultur&lt;br /&gt;
* Über Münster&lt;br /&gt;
** Sehenswürdigkeiten|Sehenswürdigkeiten&lt;br /&gt;
** Sicherheit|Sicherheit&lt;br /&gt;
** Soziales|Soziales &lt;br /&gt;
** Umweltschutz und Nachhaltigkeit|Umwelschutz und Nachhaltigkeit&lt;br /&gt;
** Wohnen|Wohnen&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=MediaWiki:Sidebar&amp;diff=1098</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=MediaWiki:Sidebar&amp;diff=1098"/>
		<updated>2026-05-05T13:00:43Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
* navigation&lt;br /&gt;
** Hauptseite|Startseite&lt;br /&gt;
* Ankommen in Münster&lt;br /&gt;
** Ankommen|Startseite &amp;quot;Ankommen&amp;quot;&lt;br /&gt;
** Ankommen-Arbeit|Arbeit &amp;amp; Qualifizierung&lt;br /&gt;
** Ankommen-Aufenthalt|Aufenthalt &amp;amp; Recht&lt;br /&gt;
** Ankommen-Bildung|Bildung  &amp;amp; Anerkennung&lt;br /&gt;
** Ankommen-Gesundheit|Gesundheit &amp;amp; Vorsorge&lt;br /&gt;
** Ankommen-Wohnen|Wohnen &amp;amp; Leben&lt;br /&gt;
* Freizeit &amp;amp; Socializing&lt;br /&gt;
** Freizeit|Startseite Freizeit&lt;br /&gt;
** Aktuelles|Aktuelles&lt;br /&gt;
** Sharing|Give-Boxen &amp;amp; Bücherschränke&lt;br /&gt;
** Sport|Sport&lt;br /&gt;
** Vereine|Vereine&lt;br /&gt;
** Kultur|Kultur&lt;br /&gt;
* Über Münster&lt;br /&gt;
** Sehenswürdigkeiten|Sehenswürdigkeiten&lt;br /&gt;
** Sicherheit|Sicherheit&lt;br /&gt;
** Soziales|Soziales &lt;br /&gt;
** Umweltschutz und Nachhaltigkeit|Umwelschutz und Nachhaltigkeit&lt;br /&gt;
** Wohnen|Wohnen&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Widget:Ankommen-Arbeit&amp;diff=1097</id>
		<title>Widget:Ankommen-Arbeit</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Widget:Ankommen-Arbeit&amp;diff=1097"/>
		<updated>2026-05-05T12:43:02Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
  .tiles-container {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: space-between;&lt;br /&gt;
    gap: 20px;&lt;br /&gt;
    flex-wrap: wrap;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .tile {&lt;br /&gt;
    width: 30%;&lt;br /&gt;
    background-color: #fac393;&lt;br /&gt;
    border-radius: 10px;&lt;br /&gt;
    padding: 15px;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);&lt;br /&gt;
    transition: transform 0.3s ease;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .tile:hover {&lt;br /&gt;
    transform: translateY(-5px);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .tile a {&lt;br /&gt;
    text-decoration: none;&lt;br /&gt;
    color: inherit;&lt;br /&gt;
    display: block;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .tile img {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    border-radius: 10px;&lt;br /&gt;
    margin-bottom: 10px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .tile h3 {&lt;br /&gt;
    font-size: 1.2em;&lt;br /&gt;
    margin-bottom: 10px;&lt;br /&gt;
    color: #333;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .tile p {&lt;br /&gt;
    font-size: 0.9em;&lt;br /&gt;
    color: #666;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* Media Query für mobile Geräte */&lt;br /&gt;
  @media (max-width: 768px) {&lt;br /&gt;
    .tile {&lt;br /&gt;
      width: 100%; /* Kacheln werden untereinander angezeigt */&lt;br /&gt;
      margin-bottom: 20px; /* Abstand zwischen den Kacheln */&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;h2&amp;gt;Arbeit &amp;amp; Ausbildung&amp;lt;/h2&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;Hier findest du Informationen zu Beruf, Ausbildung und Weiterbildung.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;tiles-container&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;tile&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;a href=&amp;quot;https://www.mamba-muenster.de/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;img src=&amp;quot;/w/images/6/66/Mamba.jpg&amp;quot; alt=&amp;quot;Bild 1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;h3&amp;gt;Mamba4you&amp;lt;/h3&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Weiterleitung zur Seite von Mamba4you, für Menschen mit Fluchterfahrung.&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/a&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;div class=&amp;quot;tile&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;a href=&amp;quot;https://www.hwk-muenster.de/de/ausbildung/ausbildungsbetriebe#praktikums-_und_lehrstellenportal&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;img src=&amp;quot;/w/images/6/64/Hwk.jpg&amp;quot; alt=&amp;quot;Bild 2&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;h3&amp;gt;Handwerkskammer Münster&amp;lt;/h3&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Weiterleitung auf die Seite der Handwerkskammer HWK Münster.&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/a&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;div class=&amp;quot;tile&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;a href=&amp;quot;https://www.ausbildung.de/staedte/muenster/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;img src=&amp;quot;/w/images/f/fa/Ausbildung.jpg&amp;quot; alt=&amp;quot;Bild 3&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;h3&amp;gt;Ausbildungssuche&amp;lt;/h3&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Weiterleitung zu Ausbildung.de / Münster&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/a&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;h2&amp;gt;Ausbildung und Lehre&amp;lt;/h2&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;Hier erhältst du als junger Mensch Details zu beruflichen Perspektiven.&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;h3&amp;gt;Informationen rund um die Ausbildung&amp;lt;/h3&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;Wusstest du, dass eine Ausbildung nicht unbedingt zum 01.08. eines Jahres beginnen muss? Sie kann in Absprache mit dem Ausbildungsbetrieb  auch ganzjährig begonnen werden. Auch bei der &amp;lt;a href=&amp;quot;https://www.ihk.de/nordwestfalen/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;IHK Nordwestfalen&amp;lt;/a&amp;gt; findest du viele Informationen rund um das Thema Ausbildung und Lehre.&amp;lt;/p&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;h2&amp;gt;Weitere Informationen&amp;lt;/h2&amp;gt;&lt;br /&gt;
   &amp;lt;p&amp;gt;Ungeordnete Liste:&amp;lt;/p&amp;gt;&lt;br /&gt;
   &amp;lt;ul&amp;gt;&lt;br /&gt;
     &amp;lt;li&amp;gt;Das &amp;lt;a href=&amp;quot;https://www.caritas-ms.de/de/einrichtungen-und-angebote/bildung-und-unterstuetzung/jugendausbildungszentrum-jaz/&amp;quot; target=_blank&amp;gt; JAZ&amp;lt;/a&amp;gt; unterstützt dich ebenfalls bei der Suche nach einer Ausbildung.&amp;lt;/li&amp;gt;&lt;br /&gt;
     &amp;lt;li&amp;gt;Im &amp;lt;a href=&amp;quot;https://www.hbz-bildung.de/de/ausbildung/berufsausbildung-nach-mass&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt; Bildungszentrum der Handwerkskammer&amp;lt;/a&amp;gt; wirst du auch auf ein Beratungsangebot stoßen.&amp;lt;/li&amp;gt;&lt;br /&gt;
     &amp;lt;li&amp;gt;Wenn du mehr Fragen hast, gibt es auch Berufsberatungsangebote im &amp;lt;a href=&amp;quot;https://www.arbeitsagentur.de/vor-ort/ahlen-muenster/biz-muenster&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt; BIZ&amp;lt;/a&amp;gt; der Agentur für Arbeit&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Hofl%C3%A4den&amp;diff=1096</id>
		<title>Hofläden</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Hofl%C3%A4den&amp;diff=1096"/>
		<updated>2026-05-05T12:40:28Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: Ra.Baba hat den Betrieb zum 31.3.2026 aufgegeben.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hofläden in Münster ==&lt;br /&gt;
&lt;br /&gt;
=== Überblick ===&lt;br /&gt;
Die Stadt Münster fördert aktiv die Entwicklung und den Erhalt von Hofläden als Teil ihrer Nachhaltigkeitsstrategie &amp;quot;Münster 2030&amp;quot;. Ziele dieser Strategie im Bereich Ernährung umfassen die Unterstützung regionaler Wertschöpfungsketten und die Steigerung des Anteils ökologischer Landwirtschaft.&lt;br /&gt;
&lt;br /&gt;
=== Merkmale der Hofläden in Münster ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Produktvielfalt&#039;&#039;&#039;: Die Hofläden bieten ein breites Spektrum an Produkten, darunter frisches Obst und Gemüse, Fleisch- und Wurstwaren, Eier, Milchprodukte, Honig und verarbeitete Produkte wie Marmeladen oder Säfte.&lt;br /&gt;
* &#039;&#039;&#039;Bio-Produkte&#039;&#039;&#039;: Viele Hofläden in Münster führen Bio-Produkte, entweder als Teil- oder Vollsortiment.&lt;br /&gt;
* &#039;&#039;&#039;Saisonalität&#039;&#039;&#039;: Das Angebot in den Hofläden richtet sich stark nach den Jahreszeiten, was die Frische und Nachhaltigkeit der Produkte gewährleistet.&lt;br /&gt;
* &#039;&#039;&#039;Direktvermarktung&#039;&#039;&#039;: Durch den direkten Verkauf vom Erzeuger zum Verbraucher werden Transportwege minimiert und die regionale Wirtschaft gestärkt.&lt;br /&gt;
* &#039;&#039;&#039;Zusatzangebote&#039;&#039;&#039;: Einige Hofläden bieten zusätzliche Services wie Cafés, Verkaufsautomaten für den 24/7-Einkauf oder Online-Bestellmöglichkeiten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Verteilung im Stadtgebiet ===&lt;br /&gt;
Hofläden sind in verschiedenen Stadtteilen Münsters vertreten, darunter in Kinderhaus, Coerde, Nienberge, Roxel, Mecklenbeck, Albachten, Amelsbüren, Hiltrup, Handorf, Gelmer und Wolbeck.&lt;br /&gt;
&lt;br /&gt;
== Übersicht der Hofläden in Münster ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Stadtteil&lt;br /&gt;
! Name&lt;br /&gt;
! Adresse&lt;br /&gt;
! Öffnungszeiten&lt;br /&gt;
! Besonderheiten&lt;br /&gt;
! Sortiment&lt;br /&gt;
|-&lt;br /&gt;
| Sprakel&lt;br /&gt;
| Hof Ontrup&lt;br /&gt;
| Sprakeler Str. 116, 48159 Münster&lt;br /&gt;
| Mi 9-13 Uhr, Do &amp;amp; Fr 9-13 Uhr &amp;amp; 14-18 Uhr, Sa 9-15 Uhr&lt;br /&gt;
| Verkaufsautomat 24/7&lt;br /&gt;
| Fleisch und Wurstwaren, selbstgemachte Marmeladen, Soßen, Fertiggerichte, Eier, Rindfleisch, Kartoffeln, Äpfel, Apfelsaft, Spirituosen&lt;br /&gt;
|-&lt;br /&gt;
| Kinderhaus&lt;br /&gt;
| Gut Kinderhaus&lt;br /&gt;
| Am-Max-Klemens-Kanal 19, 48159 Münster&lt;br /&gt;
| Öffnungszeiten siehe Internet&lt;br /&gt;
| Café&lt;br /&gt;
| Saisonales Obst und Gemüse, Apfelsaft, Eier, Kräuter, Blumen, Stauden, Gewürzgurken, Milchprodukte, Chips, Wurstwaren, Präsentkörbe, Essig, Öl, Kartoffeln&lt;br /&gt;
|-&lt;br /&gt;
| Kinderhaus&lt;br /&gt;
| Hof Rottmann&lt;br /&gt;
| Gasselstiege 235, 48159 Münster&lt;br /&gt;
| Do - So 12 - 18 Uhr&lt;br /&gt;
| Online-Bestellung möglich, Bio-Teilsortiment&lt;br /&gt;
| Fleischprodukte vom Wagyu-Rind, saisonales Obst, Grillzubehör, Weine, Gin, saisonale Beeren&lt;br /&gt;
Extra Hütte für Bio Kürbisse und Kartoffeln (kontaktlos zahlbar, PayPal QR-Code)&lt;br /&gt;
|-&lt;br /&gt;
| Kinderhaus&lt;br /&gt;
| Hofladen Stegemann-Wibbelt&lt;br /&gt;
| Kanalstraße 258, 48147 Münster&lt;br /&gt;
| Mo - So 9 - 19 Uhr&lt;br /&gt;
| &lt;br /&gt;
| Fleischprodukte vom Galllowayrind, Marmelade, Honig, Münstersenf, Kartoffeln, Eier, Rind- und Schweinefleisch, Geflügel, Wildfleisch, Salami, Gewürze, Spirituosen, Geschenkekörbe&lt;br /&gt;
|-&lt;br /&gt;
| Coerde&lt;br /&gt;
| Hof Greiwing&lt;br /&gt;
| Zum Rieselfeld 85, 48157 Münster&lt;br /&gt;
| Mo - Sa 8 -18 Uhr&lt;br /&gt;
| &lt;br /&gt;
| Kartoffeln und Eier (Selbstbedienung)&lt;br /&gt;
|-&lt;br /&gt;
| Nienberge&lt;br /&gt;
| Blumen- und Kürbisparadies Stertmann&lt;br /&gt;
| Altenbergerstr. 319, 48161 Münster&lt;br /&gt;
| Verkaufshütte 24/7&lt;br /&gt;
| &lt;br /&gt;
| Kürbisse, Kartoffeln, Fruchtaufstriche, Eintöpfe, Eier, Suppenhühner, Blumen zum selbst pflücken, Fleisch, Plätzchen, Eintöpfe, Honig, Schwarzbrot, Brotmischungen, Wurst&lt;br /&gt;
|-&lt;br /&gt;
| Gievenbeck&lt;br /&gt;
| Milchtankstelle Dieckmann&lt;br /&gt;
| Nünningweg 150, 48161 Münster&lt;br /&gt;
| Verkaufsautomat 24/7&lt;br /&gt;
| &lt;br /&gt;
| Rohmilch, Fleisch, Marmelade, saisonales Obst, Präsentkörbe, Eis, Honig, Eier, Kartoffeln, Nudeln, Kuchen, Suppen/Eintöpfe, Grillfleisch&lt;br /&gt;
|-&lt;br /&gt;
| Gievenbeck&lt;br /&gt;
| Hof Krützkemper&lt;br /&gt;
| Roxeler Str. 466, 48161 Münster&lt;br /&gt;
| Mo - Sa 9 - 19 Uhr, So 9 - 12 Uhr&lt;br /&gt;
| &lt;br /&gt;
| Eier, Honig, saisonales Obst und Gemüse, Marmelade, Nudeln, Eierlikör, Kartoffeln, Milchprodukte, Schweine- und Rindfleisch, Wildfleisch, Senf, Hofseife&lt;br /&gt;
|-&lt;br /&gt;
| Roxel&lt;br /&gt;
| Wildermanns Hofladen&lt;br /&gt;
| Altenroxeler Str. 95, 48161 Münster&lt;br /&gt;
| Mo- Do 15 - 19 Uhr, Di auch 9 - 12 Uhr, Fr 9 - 12 &amp;amp; 14 - 19 Uhr, Sa 10 - 16 Uhr&lt;br /&gt;
| Bio-Teilsortiment&lt;br /&gt;
| Rind- und Schweinefleisch, Suppenhühner und Hähnchen, Eier, saisonales Gemüse, Marmelade, Zwiebel-Chutney, Rohmilchkäse, Salzlakenkäse, Eis, Backmischungen, Mehl, Getränke&lt;br /&gt;
|-&lt;br /&gt;
| Mecklenbeck&lt;br /&gt;
| Eggerts Scheune&lt;br /&gt;
| Schlautstiege 44, 48163 Münster&lt;br /&gt;
| Mo - Fr 10 - 17.30 Uhr, Sa 10 - 12.30 Uhr&lt;br /&gt;
| Garten-Café, 100% Bio&lt;br /&gt;
| Frisches Obst und Gemüse, Brot, Milchprodukte, Käse, Weine, Soßen&lt;br /&gt;
|-&lt;br /&gt;
| Albachten&lt;br /&gt;
| Hof Averweg&lt;br /&gt;
| Haus Forkenbeck 20, 48163 Münster&lt;br /&gt;
| Verkaufsautomat 24/7&lt;br /&gt;
| &lt;br /&gt;
| Kartoffeln, saisonales Obst und Gemüse, Marmeladen, Chutney, Brot (im Winter), Milchprodukte, Eis, Fleisch, Eier&lt;br /&gt;
|-&lt;br /&gt;
| Albachten&lt;br /&gt;
| Hof Billermann&lt;br /&gt;
| Weseler Str. 939, 48163 Münster&lt;br /&gt;
| Verkaufsautomat 24/7&lt;br /&gt;
| &lt;br /&gt;
| Eier, Nudeln, Eierlikör, Grillfleisch&lt;br /&gt;
|-&lt;br /&gt;
| Albachten&lt;br /&gt;
| Hofladen Freitag&lt;br /&gt;
| Sendener Stiege 32, 48163 Münster&lt;br /&gt;
| Mo - Fr 9 - 13 Uhr &amp;amp; 15 - 18 Uhr, Sa 9 - 15 Uhr&lt;br /&gt;
| &lt;br /&gt;
| Kartoffeln, Möhren, Salat, Tomaten, Äpfel, Lauchzwiebeln, Kürbis, Rote Bete, Knoblauch, Zwiebeln&lt;br /&gt;
|-&lt;br /&gt;
| Albachten&lt;br /&gt;
| Hof Holtmann&lt;br /&gt;
| Ventrup 60, 48163 Münster&lt;br /&gt;
| Nur Online-Bestellung&lt;br /&gt;
| &lt;br /&gt;
| Fleischprodukte vom Wagyu-Rind&lt;br /&gt;
|-&lt;br /&gt;
| Amelsbüren&lt;br /&gt;
| Hof Brüning-Sudhof&lt;br /&gt;
| Davertstraße 129, 48163 Münster&lt;br /&gt;
| Verkaufsautomat 24/7&lt;br /&gt;
| &lt;br /&gt;
| Freilandeier, Nudeln, Produkte vom Bruderhahn im Glas, Honig, Kartoffeln, Grillfleisch&lt;br /&gt;
|-&lt;br /&gt;
| Amelsbüren&lt;br /&gt;
| Irmgards Bauernlädchen&lt;br /&gt;
| Kappenberger Damm 263, 48163 Münster&lt;br /&gt;
| Di - Do 9 - 13 Uhr &amp;amp; 14.30 - 18 Uhr, Fr 9 - 18 Uhr, Sa 10 - 13 Uhr&lt;br /&gt;
| Verkaufsautomat 24/7&lt;br /&gt;
| Eier, Hühner, Ente und Gänse (November bis Dezember), Mittwoch und Freitags Brot, Brötchen, Kuchen, Kartoffeln, Hähnchen, Milch, Gurken, Fertiggerichte, Grillfleisch, saisonales Obst und Gemüse&lt;br /&gt;
|-&lt;br /&gt;
| Hiltrup&lt;br /&gt;
| Lohmanns Hof&lt;br /&gt;
| Westfalenstr. 48, 48165 Münster&lt;br /&gt;
| Di - Fr 10 - 18 Uhr, Sa 9 - 17 Uhr, So 9 - 14 Uhr&lt;br /&gt;
| Bio-Teilsortiment&lt;br /&gt;
| Eier, Erdbeeren, Rindfleisch, Eierlikör, Nudeln, saisonales Gemüse, Eintöpfe, Suppen, Milchprodukte, Liköre, Grillfleisch&lt;br /&gt;
|-&lt;br /&gt;
| Handorf&lt;br /&gt;
| Biohof Borghoff&lt;br /&gt;
| Werse 27, 48157 Münster&lt;br /&gt;
| Mo - So 10 - 18 Uhr&lt;br /&gt;
| 100% Bio&lt;br /&gt;
| Kartoffeln, Eier, Gemüse, saisonales Obst&lt;br /&gt;
|-&lt;br /&gt;
| Handorf&lt;br /&gt;
| Emshof Hofladen&lt;br /&gt;
| Verth 14, 48291 Telgte&lt;br /&gt;
| Eröffnung in 2023&lt;br /&gt;
| Café&lt;br /&gt;
| Saisonales Obst, Gemüse, Marmelade, Fleischprodukte, Eier, Bücher und Informationsmaterial zum Thema ökologischer Landbau&lt;br /&gt;
|-&lt;br /&gt;
| Handorf&lt;br /&gt;
| Große Kintrup&lt;br /&gt;
| Kasewinkel 7, 48157 Münster-Handorf&lt;br /&gt;
| Verkaufsautomat 24/7&lt;br /&gt;
| Online-Bestellung möglich&lt;br /&gt;
| Milch, Joghurt, Quark, Eis&lt;br /&gt;
|-&lt;br /&gt;
| Handorf&lt;br /&gt;
| Handorfer Obsthof&lt;br /&gt;
| Handorfer Str. 103, 48157 Münster&lt;br /&gt;
| Mo- Fr 9 - 19 Uhr, Sa 9 - 18 Uhr&lt;br /&gt;
| Bio-Teilsortiment&lt;br /&gt;
| Obst, Gemüse, Kartoffeln, Eier, Backwaren, Honig, Marmeladen, Mehl und Backmischungen, Lupinen- und Haferprodukte&lt;br /&gt;
|-&lt;br /&gt;
| Handorf&lt;br /&gt;
| Hof Schwermann&lt;br /&gt;
| Werse 29, 48157 Münster&lt;br /&gt;
| Anfang April bis Ende Juni: Do &amp;amp; Fr 10 - 13 &amp;amp; 14.30 - 18.30 Uhr, Sa 10 - 18 Uhr, So 10 - 17 Uhr (auch an Feiertagen)&lt;br /&gt;
| Bio-Teilsortiment&lt;br /&gt;
| Spargel und Erdbeeren, Milchprodukte, Kartoffeln&lt;br /&gt;
|-&lt;br /&gt;
| Handorf&lt;br /&gt;
| Hof Spielbrink&lt;br /&gt;
| Helweger Esch 51, 48157 Münster&lt;br /&gt;
| Öffnungszeiten siehe Internet&lt;br /&gt;
| Café, Verkaufsautomat 24/7&lt;br /&gt;
| Spargel, Eier, Erdbeeren, Grillfleisch, Milch, Jogurt, Käse, Milcheis, saisonales Obst und Gemüse, Marmeladen, Eierliköre, Weine, Gewürzmischungen, Honig, Fruchtsäfte&lt;br /&gt;
|-&lt;br /&gt;
| Handorf&lt;br /&gt;
| Naturkosthandel Ökullus&lt;br /&gt;
| Am Handorfer Bhf. 25, 48157 Münster&lt;br /&gt;
| Nur Online-Bestellung&lt;br /&gt;
| 100% Bio&lt;br /&gt;
| Obst und Gemüse Kiste&lt;br /&gt;
|-&lt;br /&gt;
| Handorf&lt;br /&gt;
| Scellebelle&lt;br /&gt;
| Körberheide 99c, 48157 Münster&lt;br /&gt;
| Verkauf nur auf Märkten&lt;br /&gt;
| 100% Bio&lt;br /&gt;
| Bio-Ziegenkäse&lt;br /&gt;
|-&lt;br /&gt;
| Gelmer&lt;br /&gt;
| Bäcker&#039;s Erdbeer- und Spargelhof&lt;br /&gt;
| Gittrup 5, 48157 Münster&lt;br /&gt;
| Öffnungszeiten siehe Internet&lt;br /&gt;
| Café, Verkaufsautomat 24/7&lt;br /&gt;
| Spargel, Beeren, Fruchtaufstrich, Fruchtsirup, Kuchen, Spargelpizza, Weihnachtsbäume (Dez.), Kartoffeln, Eier, Milchprodukte, Grillfleisch, Eingemachtes, Gewürzmischungen&lt;br /&gt;
|-&lt;br /&gt;
| Gelmer&lt;br /&gt;
| Der Spiekerladen&lt;br /&gt;
| Gittrup 2, 48157 Münster&lt;br /&gt;
| Di - Fr 9 - 12.30 Uhr &amp;amp; 14.30 - 18.30 Uhr, Sa 9 - 12.30 Uhr&lt;br /&gt;
| &lt;br /&gt;
| Erdbeeren, Spargel, Brot, Plätzchen, Konfitüren, Milchprodukte, Käse, Eier, Wurstwaren&lt;br /&gt;
|-&lt;br /&gt;
| Gelmer&lt;br /&gt;
| Hof Lütke-Laxen&lt;br /&gt;
| Gittruper Str. 43, 48157 Münster&lt;br /&gt;
| Anfang April bis Ende Juni: Mo - So 8.30 - 20 Uhr, Café Fr - So/Feiertag 11.30 - 20 Uhr&lt;br /&gt;
| Café, Bio-Teilsortiment&lt;br /&gt;
| Spargel, Fruchtaufstrich, Brot, Kuchen, Eier, Wurst, Schinken, Grillfleisch, Milch, Joghurt, Käse, Honig, Wein, Säfte, Eingemachtes, Bio-Erdbeeren&lt;br /&gt;
|-&lt;br /&gt;
| Wolbeck&lt;br /&gt;
| Hofladen Hamsen&lt;br /&gt;
| Hiltruperstr. 71, 48167 Münster&lt;br /&gt;
| Di + Sa 10-13 Uhr, Do + Fr 10-18 Uhr&lt;br /&gt;
| Selbstpflücker Blumenfeld&lt;br /&gt;
| Saisonales Gemüse, Äpfel, Eier, Hähnchen, Kartoffeln, Honig, Fruchtaufstriche, Spirituosen, Milchprodukte, Eis, Suppen/Eintöpfe, Nudeln, Plätzchen, Wurstwaren, Brot, Säfte&lt;br /&gt;
|-&lt;br /&gt;
| Wolbeck&lt;br /&gt;
| Hof Runtenberg&lt;br /&gt;
| Grenkuhlenweg 55, 48167 Münster&lt;br /&gt;
| Di &amp;amp; Fr 9 - 12.30 Uhr &amp;amp; 14 - 18 Uhr&lt;br /&gt;
| &lt;br /&gt;
| Tomaten, Gurken, Paprika&lt;br /&gt;
|-&lt;br /&gt;
| Wolbeck&lt;br /&gt;
| Hof Wortmann&lt;br /&gt;
| Telgterstr. 29, 48167 Münster&lt;br /&gt;
| Mo &amp;amp; Sa 8 - 13 Uhr&lt;br /&gt;
| &lt;br /&gt;
| Kuchen, Torten und Backwaren&lt;br /&gt;
|-&lt;br /&gt;
| Wolbeck&lt;br /&gt;
| Kräuterhof Rohlmann&lt;br /&gt;
| Everswinkel Str. 24, 48167 Münster&lt;br /&gt;
| Di - Fr 10 - 18 Uhr, Sa 10 - 14 Uhr, April - Juni &amp;amp; September&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&lt;br /&gt;
Stadt Münster: Stadtplan mit Hofläden und Wochenmärkten, Stand: 05/23 https://www.stadt-muenster.de/fileadmin/user_upload/stadt-muenster/67_umwelt/pdf/Hoflaeden-und-Maerkte_web.pdf&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Widget:StartseitenSuche&amp;diff=1095</id>
		<title>Widget:StartseitenSuche</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Widget:StartseitenSuche&amp;diff=1095"/>
		<updated>2026-05-05T12:30:06Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;overlay-container&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;overlay-content&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;chat-widget&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div id=&amp;quot;chat-messages&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div id=&amp;quot;chat-sources-panel&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;form id=&amp;quot;chat-form&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;chat-input&amp;quot; placeholder=&amp;quot;Stelle mir deine Frage …&amp;quot; autocomplete=&amp;quot;off&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;button type=&amp;quot;submit&amp;quot; id=&amp;quot;chat-send&amp;quot;&amp;gt;Fragen&amp;lt;/button&amp;gt;&lt;br /&gt;
      &amp;lt;/form&amp;gt;&lt;br /&gt;
      &amp;lt;div id=&amp;quot;chat-footer&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;span id=&amp;quot;chat-status&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;button id=&amp;quot;chat-new&amp;quot; type=&amp;quot;button&amp;quot;&amp;gt;Neue Unterhaltung&amp;lt;/button&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.overlay-container {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  min-height: 400px;&lt;br /&gt;
  padding: 24px;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  border-radius: 12px;&lt;br /&gt;
  background-color: #2f3e46;&lt;br /&gt;
  background-image: url(&amp;quot;/w/images/a/a9/Schloss-Muenster-Philipp-Foelting-CC-BY-SA.jpg&amp;quot;);&lt;br /&gt;
  background-size: cover;&lt;br /&gt;
  background-position: center;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.overlay-container::before {&lt;br /&gt;
  content: &amp;quot;&amp;quot;;&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  inset: 0;&lt;br /&gt;
  background: rgba(0, 0, 0, 0.38);&lt;br /&gt;
  z-index: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.overlay-content {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  z-index: 2;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  max-width: 860px;&lt;br /&gt;
  padding: 20px;&lt;br /&gt;
  border-radius: 12px;&lt;br /&gt;
  background: rgba(255, 255, 255, 0.92);&lt;br /&gt;
  backdrop-filter: blur(4px);&lt;br /&gt;
  -webkit-backdrop-filter: blur(4px);&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-widget {&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  font-family: -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-messages {&lt;br /&gt;
  min-height: 120px;&lt;br /&gt;
  max-height: 500px;&lt;br /&gt;
  overflow-y: auto;&lt;br /&gt;
  padding: 8px 0;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-messages:empty::before {&lt;br /&gt;
  content: &amp;quot;Stelle eine Frage und erhalte Antworten basierend auf dem Münster Wiki und asugewählten Web-Inhalten für Münster. Beachte: KI-Suche kann Fehler machen. Prüfe deine Ergebnisse sorgfältig. Verwende keine personenbezogenen Daten.&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  color: #666;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  padding: 40px 16px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg {&lt;br /&gt;
  max-width: 85%;&lt;br /&gt;
  padding: 10px 14px;&lt;br /&gt;
  border-radius: 10px;&lt;br /&gt;
  font-size: 14.5px;&lt;br /&gt;
  line-height: 1.55;&lt;br /&gt;
  word-wrap: break-word;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-user {&lt;br /&gt;
  align-self: flex-end;&lt;br /&gt;
  background: #00308D;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  border-bottom-right-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-assistant {&lt;br /&gt;
  align-self: flex-start;&lt;br /&gt;
  background: #f0f2f5;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  border-bottom-left-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-assistant p {&lt;br /&gt;
  margin: 0 0 8px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-assistant p:last-child {&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@keyframes chatDots {&lt;br /&gt;
  0%, 80%, 100% { opacity: 0.3; }&lt;br /&gt;
  40% { opacity: 1; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-loading-dots span {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  width: 7px;&lt;br /&gt;
  height: 7px;&lt;br /&gt;
  margin: 0 2px;&lt;br /&gt;
  background: #999;&lt;br /&gt;
  border-radius: 50%;&lt;br /&gt;
  animation: chatDots 1.2s ease-in-out infinite;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-loading-dots span:nth-child(2) { animation-delay: 0.15s; }&lt;br /&gt;
.chat-loading-dots span:nth-child(3) { animation-delay: 0.3s; }&lt;br /&gt;
&lt;br /&gt;
#chat-sources-panel {&lt;br /&gt;
  display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-sources-panel.visible {&lt;br /&gt;
  display: block;&lt;br /&gt;
  margin: 4px 0 8px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-sources-toggle {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: 1px solid #ddd;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  padding: 6px 12px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-sources-toggle:hover {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-sources-list {&lt;br /&gt;
  display: none;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-sources-list.open {&lt;br /&gt;
  display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item {&lt;br /&gt;
  padding: 10px 12px;&lt;br /&gt;
  margin-bottom: 6px;&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  transition: border-color 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item:hover {&lt;br /&gt;
  border-color: #b0b8c1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item h5 {&lt;br /&gt;
  margin: 0 0 3px 0;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item h5 a {&lt;br /&gt;
  color: #00308D;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item h5 a:hover {&lt;br /&gt;
  text-decoration: underline;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item .chat-source-snippet {&lt;br /&gt;
  font-size: 12.5px;&lt;br /&gt;
  line-height: 1.45;&lt;br /&gt;
  color: #666;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item .chat-source-meta {&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  color: #999;&lt;br /&gt;
  margin-top: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-form {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-input {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  padding: 10px 14px;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  border: 1px solid #ccc;&lt;br /&gt;
  border-right: none;&lt;br /&gt;
  border-radius: 4px 0 0 4px;&lt;br /&gt;
  outline: none;&lt;br /&gt;
  transition: border-color 0.2s;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  min-width: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-input:focus {&lt;br /&gt;
  border-color: #4CAF50;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-input:disabled {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
  color: #999;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-send {&lt;br /&gt;
  padding: 10px 20px;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  background: #4CAF50;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-radius: 0 4px 4px 0;&lt;br /&gt;
  transition: background 0.2s;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-send:hover {&lt;br /&gt;
  background: #43A047;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-send:disabled {&lt;br /&gt;
  background: #a5d6a7;&lt;br /&gt;
  cursor: not-allowed;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-footer {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: space-between;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
  min-height: 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-status {&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #666;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-new {&lt;br /&gt;
  display: none;&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: 1px solid #ccc;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  padding: 4px 12px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-new:hover {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-new.visible {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-error {&lt;br /&gt;
  align-self: center;&lt;br /&gt;
  background: #fef2f2;&lt;br /&gt;
  color: #b00;&lt;br /&gt;
  border: 1px solid #fca5a5;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  padding: 8px 14px;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Tablet */&lt;br /&gt;
@media (max-width: 900px) {&lt;br /&gt;
  .overlay-container {&lt;br /&gt;
    min-height: 340px;&lt;br /&gt;
    padding: 18px;&lt;br /&gt;
    border-radius: 10px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .overlay-content {&lt;br /&gt;
    padding: 16px;&lt;br /&gt;
    border-radius: 10px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Smartphone */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
  .overlay-container {&lt;br /&gt;
    min-height: 280px;&lt;br /&gt;
    padding: 12px;&lt;br /&gt;
    align-items: stretch;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .overlay-content {&lt;br /&gt;
    padding: 14px;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-form {&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    gap: 8px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-input {&lt;br /&gt;
    border-right: 1px solid #ccc;&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-send {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .chat-msg {&lt;br /&gt;
    max-width: 100%;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-footer {&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Kleine Smartphones */&lt;br /&gt;
@media (max-width: 400px) {&lt;br /&gt;
  .overlay-container {&lt;br /&gt;
    min-height: 240px;&lt;br /&gt;
    padding: 10px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .overlay-content {&lt;br /&gt;
    padding: 12px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-messages {&lt;br /&gt;
    max-height: 420px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .chat-msg {&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
    padding: 9px 12px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function() {&lt;br /&gt;
  var form = document.getElementById(&#039;chat-form&#039;);&lt;br /&gt;
  var input = document.getElementById(&#039;chat-input&#039;);&lt;br /&gt;
  var sendBtn = document.getElementById(&#039;chat-send&#039;);&lt;br /&gt;
  var messagesEl = document.getElementById(&#039;chat-messages&#039;);&lt;br /&gt;
  var sourcesPanel = document.getElementById(&#039;chat-sources-panel&#039;);&lt;br /&gt;
  var statusEl = document.getElementById(&#039;chat-status&#039;);&lt;br /&gt;
  var newBtn = document.getElementById(&#039;chat-new&#039;);&lt;br /&gt;
  var apiHost = &#039;api.&#039; + location.hostname.split(&#039;.&#039;).slice(1).join(&#039;.&#039;);&lt;br /&gt;
&lt;br /&gt;
  var conversationId = null;&lt;br /&gt;
  var isLoading = false;&lt;br /&gt;
&lt;br /&gt;
  function escapeHtml(str) {&lt;br /&gt;
    var d = document.createElement(&#039;div&#039;);&lt;br /&gt;
    d.textContent = str;&lt;br /&gt;
    return d.innerHTML;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function truncate(str, len) {&lt;br /&gt;
    if (str.length &amp;lt;= len) return str;&lt;br /&gt;
    return str.substring(0, len).replace(/\\s+\\S*$/, &#039;&#039;) + &#039;\\u2026&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function formatAnswer(text) {&lt;br /&gt;
    var html = escapeHtml(text);&lt;br /&gt;
    html = html.replace(/\\*\\*(.+?)\\*\\*/g, &#039;&amp;lt;strong&amp;gt;$1&amp;lt;/strong&amp;gt;&#039;);&lt;br /&gt;
    var paragraphs = html.split(/\\n{2,}/);&lt;br /&gt;
    if (paragraphs.length &amp;gt; 1) {&lt;br /&gt;
      html = paragraphs.map(function(p) { return &#039;&amp;lt;p&amp;gt;&#039; + p.replace(/\\n/g, &#039;&amp;lt;br&amp;gt;&#039;) + &#039;&amp;lt;/p&amp;gt;&#039;; }).join(&#039;&#039;);&lt;br /&gt;
    } else {&lt;br /&gt;
      html = html.replace(/\\n/g, &#039;&amp;lt;br&amp;gt;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    return html;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addUserMessage(text) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-user&#039;;&lt;br /&gt;
    div.textContent = text;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addAssistantMessage(text) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-assistant&#039;;&lt;br /&gt;
    div.innerHTML = formatAnswer(text);&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addLoadingIndicator() {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-assistant chat-loading-dots&#039;;&lt;br /&gt;
    div.id = &#039;chat-loading&#039;;&lt;br /&gt;
    div.innerHTML = &#039;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function removeLoadingIndicator() {&lt;br /&gt;
    var el = document.getElementById(&#039;chat-loading&#039;);&lt;br /&gt;
    if (el) el.remove();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addError(msg) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-error&#039;;&lt;br /&gt;
    div.textContent = msg;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function scrollToBottom() {&lt;br /&gt;
    messagesEl.scrollTop = messagesEl.scrollHeight;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function renderSources(sources) {&lt;br /&gt;
    if (!sources || sources.length === 0) {&lt;br /&gt;
      sourcesPanel.className = &#039;&#039;;&lt;br /&gt;
      sourcesPanel.innerHTML = &#039;&#039;;&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    sourcesPanel.className = &#039;visible&#039;;&lt;br /&gt;
    var listId = &#039;src-list-&#039; + Date.now();&lt;br /&gt;
    var html = &#039;&amp;lt;button class=&amp;quot;chat-sources-toggle&amp;quot; onclick=&amp;quot;var l=document.getElementById(\\&#039;&#039; + listId + &#039;\\&#039;);l.classList.toggle(\\&#039;open\\&#039;);this.textContent=l.classList.contains(\\&#039;open\\&#039;)?\\&#039;▲ Quellen verbergen\\&#039;:\\&#039;▼ &#039; + sources.length + &#039; Quellen anzeigen\\&#039;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
      + &#039;▼ &#039; + sources.length + &#039; Quellen anzeigen&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
    html += &#039;&amp;lt;div class=&amp;quot;chat-sources-list&amp;quot; id=&amp;quot;&#039; + listId + &#039;&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
    sources.forEach(function(s) {&lt;br /&gt;
      var pct = Math.round((s.similarity_score || 0) * 100);&lt;br /&gt;
      var wikiUrl = &#039;/wiki/&#039; + encodeURIComponent((s.page_title || &#039;&#039;).replace(/ /g, &#039;_&#039;));&lt;br /&gt;
      html += &#039;&amp;lt;div class=&amp;quot;chat-source-item&amp;quot;&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;h5&amp;gt;&amp;lt;a href=&amp;quot;&#039; + wikiUrl + &#039;&amp;quot;&amp;gt;&#039; + escapeHtml(s.page_title || &#039;&#039;) + &#039;&amp;lt;/a&amp;gt;&amp;lt;/h5&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;p class=&amp;quot;chat-source-snippet&amp;quot;&amp;gt;&#039; + escapeHtml(truncate(s.content_text || &#039;&#039;, 150)) + &#039;&amp;lt;/p&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;div class=&amp;quot;chat-source-meta&amp;quot;&amp;gt;Relevanz: &#039; + pct + &#039;% · &#039; + escapeHtml(s.source || &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    });&lt;br /&gt;
    html += &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    sourcesPanel.innerHTML = html;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function setLoading(loading) {&lt;br /&gt;
    isLoading = loading;&lt;br /&gt;
    input.disabled = loading;&lt;br /&gt;
    sendBtn.disabled = loading;&lt;br /&gt;
    if (loading) {&lt;br /&gt;
      addLoadingIndicator();&lt;br /&gt;
    } else {&lt;br /&gt;
      removeLoadingIndicator();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function updateStatus(remaining) {&lt;br /&gt;
    if (remaining &amp;gt; 0) {&lt;br /&gt;
      statusEl.textContent = remaining + &#039; R\\u00fcckfrage&#039; + (remaining !== 1 ? &#039;n&#039; : &#039;&#039;) + &#039; verbleibend&#039;;&lt;br /&gt;
    } else if (remaining === 0) {&lt;br /&gt;
      if (conversationId) {&lt;br /&gt;
        statusEl.textContent = &#039;Keine R\\u00fcckfragen mehr m\\u00f6glich&#039;;&lt;br /&gt;
        input.disabled = true;&lt;br /&gt;
        sendBtn.disabled = true;&lt;br /&gt;
        input.placeholder = &#039;Starte eine neue Unterhaltung&#039;;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    newBtn.className = conversationId ? &#039;visible&#039; : &#039;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function resetConversation() {&lt;br /&gt;
    conversationId = null;&lt;br /&gt;
    messagesEl.innerHTML = &#039;&#039;;&lt;br /&gt;
    sourcesPanel.className = &#039;&#039;;&lt;br /&gt;
    sourcesPanel.innerHTML = &#039;&#039;;&lt;br /&gt;
    statusEl.textContent = &#039;&#039;;&lt;br /&gt;
    newBtn.className = &#039;&#039;;&lt;br /&gt;
    input.disabled = false;&lt;br /&gt;
    sendBtn.disabled = false;&lt;br /&gt;
    input.placeholder = &#039;Stelle eine Frage \\u00fcber M\\u00fcnster \\u2026&#039;;&lt;br /&gt;
    input.focus();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  newBtn.addEventListener(&#039;click&#039;, resetConversation);&lt;br /&gt;
&lt;br /&gt;
  form.addEventListener(&#039;submit&#039;, function(e) {&lt;br /&gt;
    e.preventDefault();&lt;br /&gt;
    if (isLoading) return;&lt;br /&gt;
    var message = input.value.trim();&lt;br /&gt;
    if (!message) return;&lt;br /&gt;
&lt;br /&gt;
    input.value = &#039;&#039;;&lt;br /&gt;
    addUserMessage(message);&lt;br /&gt;
    setLoading(true);&lt;br /&gt;
&lt;br /&gt;
    var body = { message: message };&lt;br /&gt;
    if (conversationId) {&lt;br /&gt;
      body.conversation_id = conversationId;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var url = location.protocol + &#039;//&#039; + apiHost + &#039;/chat&#039;;&lt;br /&gt;
&lt;br /&gt;
    fetch(url, {&lt;br /&gt;
      method: &#039;POST&#039;,&lt;br /&gt;
      headers: { &#039;Content-Type&#039;: &#039;application/json&#039; },&lt;br /&gt;
      body: JSON.stringify(body)&lt;br /&gt;
    })&lt;br /&gt;
      .then(function(res) {&lt;br /&gt;
        if (!res.ok) {&lt;br /&gt;
          return res.json().then(function(data) {&lt;br /&gt;
            throw new Error(data.detail || &#039;HTTP &#039; + res.status);&lt;br /&gt;
          });&lt;br /&gt;
        }&lt;br /&gt;
        return res.json();&lt;br /&gt;
      })&lt;br /&gt;
      .then(function(data) {&lt;br /&gt;
        setLoading(false);&lt;br /&gt;
        conversationId = data.conversation_id;&lt;br /&gt;
        addAssistantMessage(data.answer);&lt;br /&gt;
        renderSources(data.sources);&lt;br /&gt;
        updateStatus(data.remaining_followups);&lt;br /&gt;
        input.focus();&lt;br /&gt;
      })&lt;br /&gt;
      .catch(function(err) {&lt;br /&gt;
        setLoading(false);&lt;br /&gt;
        addError(&#039;Fehler: &#039; + err.message);&lt;br /&gt;
        input.focus();&lt;br /&gt;
      });&lt;br /&gt;
  });&lt;br /&gt;
})();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Widget:StartseitenSuche&amp;diff=1094</id>
		<title>Widget:StartseitenSuche</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Widget:StartseitenSuche&amp;diff=1094"/>
		<updated>2026-05-05T12:28:33Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;overlay-container&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;overlay-content&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;chat-widget&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div id=&amp;quot;chat-messages&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div id=&amp;quot;chat-sources-panel&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;form id=&amp;quot;chat-form&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;chat-input&amp;quot; placeholder=&amp;quot;Stelle mir deine Frage …&amp;quot; autocomplete=&amp;quot;off&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;button type=&amp;quot;submit&amp;quot; id=&amp;quot;chat-send&amp;quot;&amp;gt;Fragen&amp;lt;/button&amp;gt;&lt;br /&gt;
      &amp;lt;/form&amp;gt;&lt;br /&gt;
      &amp;lt;div id=&amp;quot;chat-footer&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;span id=&amp;quot;chat-status&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;button id=&amp;quot;chat-new&amp;quot; type=&amp;quot;button&amp;quot;&amp;gt;Neue Unterhaltung&amp;lt;/button&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.overlay-container {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  min-height: 400px;&lt;br /&gt;
  padding: 24px;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  border-radius: 12px;&lt;br /&gt;
  background-color: #2f3e46;&lt;br /&gt;
  background-image: url(&amp;quot;/w/images/a/a9/Schloss-Muenster-Philipp-Foelting-CC-BY-SA.jpg&amp;quot;);&lt;br /&gt;
  background-size: cover;&lt;br /&gt;
  background-position: center;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.overlay-container::before {&lt;br /&gt;
  content: &amp;quot;&amp;quot;;&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  inset: 0;&lt;br /&gt;
  background: rgba(0, 0, 0, 0.38);&lt;br /&gt;
  z-index: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.overlay-content {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  z-index: 2;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  max-width: 860px;&lt;br /&gt;
  padding: 20px;&lt;br /&gt;
  border-radius: 12px;&lt;br /&gt;
  background: rgba(255, 255, 255, 0.92);&lt;br /&gt;
  backdrop-filter: blur(4px);&lt;br /&gt;
  -webkit-backdrop-filter: blur(4px);&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-widget {&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  font-family: -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-messages {&lt;br /&gt;
  min-height: 120px;&lt;br /&gt;
  max-height: 500px;&lt;br /&gt;
  overflow-y: auto;&lt;br /&gt;
  padding: 8px 0;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-messages:empty::before {&lt;br /&gt;
  content: &amp;quot;Stelle eine Frage und erhalte Antworten basierend auf dem Münster Wiki und Inhalten von Webseiten für Münster. Beachte: KI-Suche kann Fehler machen. Prüfe deine Ergebnisse sorgfältig. Verwende keine personenbezogenen Daten.&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  color: #666;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  padding: 40px 16px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg {&lt;br /&gt;
  max-width: 85%;&lt;br /&gt;
  padding: 10px 14px;&lt;br /&gt;
  border-radius: 10px;&lt;br /&gt;
  font-size: 14.5px;&lt;br /&gt;
  line-height: 1.55;&lt;br /&gt;
  word-wrap: break-word;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-user {&lt;br /&gt;
  align-self: flex-end;&lt;br /&gt;
  background: #00308D;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  border-bottom-right-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-assistant {&lt;br /&gt;
  align-self: flex-start;&lt;br /&gt;
  background: #f0f2f5;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  border-bottom-left-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-assistant p {&lt;br /&gt;
  margin: 0 0 8px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-assistant p:last-child {&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@keyframes chatDots {&lt;br /&gt;
  0%, 80%, 100% { opacity: 0.3; }&lt;br /&gt;
  40% { opacity: 1; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-loading-dots span {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  width: 7px;&lt;br /&gt;
  height: 7px;&lt;br /&gt;
  margin: 0 2px;&lt;br /&gt;
  background: #999;&lt;br /&gt;
  border-radius: 50%;&lt;br /&gt;
  animation: chatDots 1.2s ease-in-out infinite;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-loading-dots span:nth-child(2) { animation-delay: 0.15s; }&lt;br /&gt;
.chat-loading-dots span:nth-child(3) { animation-delay: 0.3s; }&lt;br /&gt;
&lt;br /&gt;
#chat-sources-panel {&lt;br /&gt;
  display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-sources-panel.visible {&lt;br /&gt;
  display: block;&lt;br /&gt;
  margin: 4px 0 8px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-sources-toggle {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: 1px solid #ddd;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  padding: 6px 12px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-sources-toggle:hover {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-sources-list {&lt;br /&gt;
  display: none;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-sources-list.open {&lt;br /&gt;
  display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item {&lt;br /&gt;
  padding: 10px 12px;&lt;br /&gt;
  margin-bottom: 6px;&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  transition: border-color 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item:hover {&lt;br /&gt;
  border-color: #b0b8c1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item h5 {&lt;br /&gt;
  margin: 0 0 3px 0;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item h5 a {&lt;br /&gt;
  color: #00308D;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item h5 a:hover {&lt;br /&gt;
  text-decoration: underline;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item .chat-source-snippet {&lt;br /&gt;
  font-size: 12.5px;&lt;br /&gt;
  line-height: 1.45;&lt;br /&gt;
  color: #666;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item .chat-source-meta {&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  color: #999;&lt;br /&gt;
  margin-top: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-form {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-input {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  padding: 10px 14px;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  border: 1px solid #ccc;&lt;br /&gt;
  border-right: none;&lt;br /&gt;
  border-radius: 4px 0 0 4px;&lt;br /&gt;
  outline: none;&lt;br /&gt;
  transition: border-color 0.2s;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  min-width: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-input:focus {&lt;br /&gt;
  border-color: #4CAF50;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-input:disabled {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
  color: #999;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-send {&lt;br /&gt;
  padding: 10px 20px;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  background: #4CAF50;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-radius: 0 4px 4px 0;&lt;br /&gt;
  transition: background 0.2s;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-send:hover {&lt;br /&gt;
  background: #43A047;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-send:disabled {&lt;br /&gt;
  background: #a5d6a7;&lt;br /&gt;
  cursor: not-allowed;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-footer {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: space-between;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
  min-height: 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-status {&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #666;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-new {&lt;br /&gt;
  display: none;&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: 1px solid #ccc;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  padding: 4px 12px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-new:hover {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-new.visible {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-error {&lt;br /&gt;
  align-self: center;&lt;br /&gt;
  background: #fef2f2;&lt;br /&gt;
  color: #b00;&lt;br /&gt;
  border: 1px solid #fca5a5;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  padding: 8px 14px;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Tablet */&lt;br /&gt;
@media (max-width: 900px) {&lt;br /&gt;
  .overlay-container {&lt;br /&gt;
    min-height: 340px;&lt;br /&gt;
    padding: 18px;&lt;br /&gt;
    border-radius: 10px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .overlay-content {&lt;br /&gt;
    padding: 16px;&lt;br /&gt;
    border-radius: 10px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Smartphone */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
  .overlay-container {&lt;br /&gt;
    min-height: 280px;&lt;br /&gt;
    padding: 12px;&lt;br /&gt;
    align-items: stretch;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .overlay-content {&lt;br /&gt;
    padding: 14px;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-form {&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    gap: 8px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-input {&lt;br /&gt;
    border-right: 1px solid #ccc;&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-send {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .chat-msg {&lt;br /&gt;
    max-width: 100%;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-footer {&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Kleine Smartphones */&lt;br /&gt;
@media (max-width: 400px) {&lt;br /&gt;
  .overlay-container {&lt;br /&gt;
    min-height: 240px;&lt;br /&gt;
    padding: 10px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .overlay-content {&lt;br /&gt;
    padding: 12px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-messages {&lt;br /&gt;
    max-height: 420px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .chat-msg {&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
    padding: 9px 12px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function() {&lt;br /&gt;
  var form = document.getElementById(&#039;chat-form&#039;);&lt;br /&gt;
  var input = document.getElementById(&#039;chat-input&#039;);&lt;br /&gt;
  var sendBtn = document.getElementById(&#039;chat-send&#039;);&lt;br /&gt;
  var messagesEl = document.getElementById(&#039;chat-messages&#039;);&lt;br /&gt;
  var sourcesPanel = document.getElementById(&#039;chat-sources-panel&#039;);&lt;br /&gt;
  var statusEl = document.getElementById(&#039;chat-status&#039;);&lt;br /&gt;
  var newBtn = document.getElementById(&#039;chat-new&#039;);&lt;br /&gt;
  var apiHost = &#039;api.&#039; + location.hostname.split(&#039;.&#039;).slice(1).join(&#039;.&#039;);&lt;br /&gt;
&lt;br /&gt;
  var conversationId = null;&lt;br /&gt;
  var isLoading = false;&lt;br /&gt;
&lt;br /&gt;
  function escapeHtml(str) {&lt;br /&gt;
    var d = document.createElement(&#039;div&#039;);&lt;br /&gt;
    d.textContent = str;&lt;br /&gt;
    return d.innerHTML;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function truncate(str, len) {&lt;br /&gt;
    if (str.length &amp;lt;= len) return str;&lt;br /&gt;
    return str.substring(0, len).replace(/\\s+\\S*$/, &#039;&#039;) + &#039;\\u2026&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function formatAnswer(text) {&lt;br /&gt;
    var html = escapeHtml(text);&lt;br /&gt;
    html = html.replace(/\\*\\*(.+?)\\*\\*/g, &#039;&amp;lt;strong&amp;gt;$1&amp;lt;/strong&amp;gt;&#039;);&lt;br /&gt;
    var paragraphs = html.split(/\\n{2,}/);&lt;br /&gt;
    if (paragraphs.length &amp;gt; 1) {&lt;br /&gt;
      html = paragraphs.map(function(p) { return &#039;&amp;lt;p&amp;gt;&#039; + p.replace(/\\n/g, &#039;&amp;lt;br&amp;gt;&#039;) + &#039;&amp;lt;/p&amp;gt;&#039;; }).join(&#039;&#039;);&lt;br /&gt;
    } else {&lt;br /&gt;
      html = html.replace(/\\n/g, &#039;&amp;lt;br&amp;gt;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    return html;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addUserMessage(text) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-user&#039;;&lt;br /&gt;
    div.textContent = text;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addAssistantMessage(text) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-assistant&#039;;&lt;br /&gt;
    div.innerHTML = formatAnswer(text);&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addLoadingIndicator() {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-assistant chat-loading-dots&#039;;&lt;br /&gt;
    div.id = &#039;chat-loading&#039;;&lt;br /&gt;
    div.innerHTML = &#039;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function removeLoadingIndicator() {&lt;br /&gt;
    var el = document.getElementById(&#039;chat-loading&#039;);&lt;br /&gt;
    if (el) el.remove();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addError(msg) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-error&#039;;&lt;br /&gt;
    div.textContent = msg;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function scrollToBottom() {&lt;br /&gt;
    messagesEl.scrollTop = messagesEl.scrollHeight;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function renderSources(sources) {&lt;br /&gt;
    if (!sources || sources.length === 0) {&lt;br /&gt;
      sourcesPanel.className = &#039;&#039;;&lt;br /&gt;
      sourcesPanel.innerHTML = &#039;&#039;;&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    sourcesPanel.className = &#039;visible&#039;;&lt;br /&gt;
    var listId = &#039;src-list-&#039; + Date.now();&lt;br /&gt;
    var html = &#039;&amp;lt;button class=&amp;quot;chat-sources-toggle&amp;quot; onclick=&amp;quot;var l=document.getElementById(\\&#039;&#039; + listId + &#039;\\&#039;);l.classList.toggle(\\&#039;open\\&#039;);this.textContent=l.classList.contains(\\&#039;open\\&#039;)?\\&#039;▲ Quellen verbergen\\&#039;:\\&#039;▼ &#039; + sources.length + &#039; Quellen anzeigen\\&#039;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
      + &#039;▼ &#039; + sources.length + &#039; Quellen anzeigen&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
    html += &#039;&amp;lt;div class=&amp;quot;chat-sources-list&amp;quot; id=&amp;quot;&#039; + listId + &#039;&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
    sources.forEach(function(s) {&lt;br /&gt;
      var pct = Math.round((s.similarity_score || 0) * 100);&lt;br /&gt;
      var wikiUrl = &#039;/wiki/&#039; + encodeURIComponent((s.page_title || &#039;&#039;).replace(/ /g, &#039;_&#039;));&lt;br /&gt;
      html += &#039;&amp;lt;div class=&amp;quot;chat-source-item&amp;quot;&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;h5&amp;gt;&amp;lt;a href=&amp;quot;&#039; + wikiUrl + &#039;&amp;quot;&amp;gt;&#039; + escapeHtml(s.page_title || &#039;&#039;) + &#039;&amp;lt;/a&amp;gt;&amp;lt;/h5&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;p class=&amp;quot;chat-source-snippet&amp;quot;&amp;gt;&#039; + escapeHtml(truncate(s.content_text || &#039;&#039;, 150)) + &#039;&amp;lt;/p&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;div class=&amp;quot;chat-source-meta&amp;quot;&amp;gt;Relevanz: &#039; + pct + &#039;% · &#039; + escapeHtml(s.source || &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    });&lt;br /&gt;
    html += &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    sourcesPanel.innerHTML = html;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function setLoading(loading) {&lt;br /&gt;
    isLoading = loading;&lt;br /&gt;
    input.disabled = loading;&lt;br /&gt;
    sendBtn.disabled = loading;&lt;br /&gt;
    if (loading) {&lt;br /&gt;
      addLoadingIndicator();&lt;br /&gt;
    } else {&lt;br /&gt;
      removeLoadingIndicator();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function updateStatus(remaining) {&lt;br /&gt;
    if (remaining &amp;gt; 0) {&lt;br /&gt;
      statusEl.textContent = remaining + &#039; R\\u00fcckfrage&#039; + (remaining !== 1 ? &#039;n&#039; : &#039;&#039;) + &#039; verbleibend&#039;;&lt;br /&gt;
    } else if (remaining === 0) {&lt;br /&gt;
      if (conversationId) {&lt;br /&gt;
        statusEl.textContent = &#039;Keine R\\u00fcckfragen mehr m\\u00f6glich&#039;;&lt;br /&gt;
        input.disabled = true;&lt;br /&gt;
        sendBtn.disabled = true;&lt;br /&gt;
        input.placeholder = &#039;Starte eine neue Unterhaltung&#039;;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    newBtn.className = conversationId ? &#039;visible&#039; : &#039;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function resetConversation() {&lt;br /&gt;
    conversationId = null;&lt;br /&gt;
    messagesEl.innerHTML = &#039;&#039;;&lt;br /&gt;
    sourcesPanel.className = &#039;&#039;;&lt;br /&gt;
    sourcesPanel.innerHTML = &#039;&#039;;&lt;br /&gt;
    statusEl.textContent = &#039;&#039;;&lt;br /&gt;
    newBtn.className = &#039;&#039;;&lt;br /&gt;
    input.disabled = false;&lt;br /&gt;
    sendBtn.disabled = false;&lt;br /&gt;
    input.placeholder = &#039;Stelle eine Frage \\u00fcber M\\u00fcnster \\u2026&#039;;&lt;br /&gt;
    input.focus();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  newBtn.addEventListener(&#039;click&#039;, resetConversation);&lt;br /&gt;
&lt;br /&gt;
  form.addEventListener(&#039;submit&#039;, function(e) {&lt;br /&gt;
    e.preventDefault();&lt;br /&gt;
    if (isLoading) return;&lt;br /&gt;
    var message = input.value.trim();&lt;br /&gt;
    if (!message) return;&lt;br /&gt;
&lt;br /&gt;
    input.value = &#039;&#039;;&lt;br /&gt;
    addUserMessage(message);&lt;br /&gt;
    setLoading(true);&lt;br /&gt;
&lt;br /&gt;
    var body = { message: message };&lt;br /&gt;
    if (conversationId) {&lt;br /&gt;
      body.conversation_id = conversationId;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var url = location.protocol + &#039;//&#039; + apiHost + &#039;/chat&#039;;&lt;br /&gt;
&lt;br /&gt;
    fetch(url, {&lt;br /&gt;
      method: &#039;POST&#039;,&lt;br /&gt;
      headers: { &#039;Content-Type&#039;: &#039;application/json&#039; },&lt;br /&gt;
      body: JSON.stringify(body)&lt;br /&gt;
    })&lt;br /&gt;
      .then(function(res) {&lt;br /&gt;
        if (!res.ok) {&lt;br /&gt;
          return res.json().then(function(data) {&lt;br /&gt;
            throw new Error(data.detail || &#039;HTTP &#039; + res.status);&lt;br /&gt;
          });&lt;br /&gt;
        }&lt;br /&gt;
        return res.json();&lt;br /&gt;
      })&lt;br /&gt;
      .then(function(data) {&lt;br /&gt;
        setLoading(false);&lt;br /&gt;
        conversationId = data.conversation_id;&lt;br /&gt;
        addAssistantMessage(data.answer);&lt;br /&gt;
        renderSources(data.sources);&lt;br /&gt;
        updateStatus(data.remaining_followups);&lt;br /&gt;
        input.focus();&lt;br /&gt;
      })&lt;br /&gt;
      .catch(function(err) {&lt;br /&gt;
        setLoading(false);&lt;br /&gt;
        addError(&#039;Fehler: &#039; + err.message);&lt;br /&gt;
        input.focus();&lt;br /&gt;
      });&lt;br /&gt;
  });&lt;br /&gt;
})();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Widget:StartseitenSuche&amp;diff=1093</id>
		<title>Widget:StartseitenSuche</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Widget:StartseitenSuche&amp;diff=1093"/>
		<updated>2026-04-28T09:32:45Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;overlay-container&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;overlay-content&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;chat-widget&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div id=&amp;quot;chat-messages&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div id=&amp;quot;chat-sources-panel&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;form id=&amp;quot;chat-form&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;chat-input&amp;quot; placeholder=&amp;quot;Stelle eine Frage über Münster …&amp;quot; autocomplete=&amp;quot;off&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;button type=&amp;quot;submit&amp;quot; id=&amp;quot;chat-send&amp;quot;&amp;gt;Fragen&amp;lt;/button&amp;gt;&lt;br /&gt;
      &amp;lt;/form&amp;gt;&lt;br /&gt;
      &amp;lt;div id=&amp;quot;chat-footer&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;span id=&amp;quot;chat-status&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;button id=&amp;quot;chat-new&amp;quot; type=&amp;quot;button&amp;quot;&amp;gt;Neue Unterhaltung&amp;lt;/button&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.overlay-container {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  min-height: 400px;&lt;br /&gt;
  padding: 24px;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  border-radius: 12px;&lt;br /&gt;
  background-color: red !important;&lt;br /&gt;
  background-image: url(&amp;quot;/w/images/a/a9/Schloss-Muenster-Philipp-Foelting-CC-BY-SA.jpg&amp;quot;);&lt;br /&gt;
  background-size: cover;&lt;br /&gt;
  background-position: center;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.overlay-container::before {&lt;br /&gt;
  content: &amp;quot;&amp;quot;;&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  inset: 0;&lt;br /&gt;
  background: rgba(0, 0, 0, 0.38);&lt;br /&gt;
  z-index: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.overlay-content {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  z-index: 2;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  max-width: 860px;&lt;br /&gt;
  padding: 20px;&lt;br /&gt;
  border-radius: 12px;&lt;br /&gt;
  background: rgba(255, 255, 255, 0.92);&lt;br /&gt;
  backdrop-filter: blur(4px);&lt;br /&gt;
  -webkit-backdrop-filter: blur(4px);&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-widget {&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  font-family: -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-messages {&lt;br /&gt;
  min-height: 120px;&lt;br /&gt;
  max-height: 500px;&lt;br /&gt;
  overflow-y: auto;&lt;br /&gt;
  padding: 8px 0;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-messages:empty::before {&lt;br /&gt;
  content: &amp;quot;Stelle eine Frage und erhalte Antworten basierend auf dem Münster Wiki.&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  color: #666;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  padding: 40px 16px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg {&lt;br /&gt;
  max-width: 85%;&lt;br /&gt;
  padding: 10px 14px;&lt;br /&gt;
  border-radius: 10px;&lt;br /&gt;
  font-size: 14.5px;&lt;br /&gt;
  line-height: 1.55;&lt;br /&gt;
  word-wrap: break-word;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-user {&lt;br /&gt;
  align-self: flex-end;&lt;br /&gt;
  background: #00308D;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  border-bottom-right-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-assistant {&lt;br /&gt;
  align-self: flex-start;&lt;br /&gt;
  background: #f0f2f5;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  border-bottom-left-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-assistant p {&lt;br /&gt;
  margin: 0 0 8px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-assistant p:last-child {&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@keyframes chatDots {&lt;br /&gt;
  0%, 80%, 100% { opacity: 0.3; }&lt;br /&gt;
  40% { opacity: 1; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-loading-dots span {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  width: 7px;&lt;br /&gt;
  height: 7px;&lt;br /&gt;
  margin: 0 2px;&lt;br /&gt;
  background: #999;&lt;br /&gt;
  border-radius: 50%;&lt;br /&gt;
  animation: chatDots 1.2s ease-in-out infinite;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-loading-dots span:nth-child(2) { animation-delay: 0.15s; }&lt;br /&gt;
.chat-loading-dots span:nth-child(3) { animation-delay: 0.3s; }&lt;br /&gt;
&lt;br /&gt;
#chat-sources-panel {&lt;br /&gt;
  display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-sources-panel.visible {&lt;br /&gt;
  display: block;&lt;br /&gt;
  margin: 4px 0 8px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-sources-toggle {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: 1px solid #ddd;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  padding: 6px 12px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-sources-toggle:hover {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-sources-list {&lt;br /&gt;
  display: none;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-sources-list.open {&lt;br /&gt;
  display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item {&lt;br /&gt;
  padding: 10px 12px;&lt;br /&gt;
  margin-bottom: 6px;&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  transition: border-color 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item:hover {&lt;br /&gt;
  border-color: #b0b8c1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item h5 {&lt;br /&gt;
  margin: 0 0 3px 0;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item h5 a {&lt;br /&gt;
  color: #00308D;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item h5 a:hover {&lt;br /&gt;
  text-decoration: underline;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item .chat-source-snippet {&lt;br /&gt;
  font-size: 12.5px;&lt;br /&gt;
  line-height: 1.45;&lt;br /&gt;
  color: #666;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item .chat-source-meta {&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  color: #999;&lt;br /&gt;
  margin-top: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-form {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-input {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  padding: 10px 14px;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  border: 1px solid #ccc;&lt;br /&gt;
  border-right: none;&lt;br /&gt;
  border-radius: 4px 0 0 4px;&lt;br /&gt;
  outline: none;&lt;br /&gt;
  transition: border-color 0.2s;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  min-width: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-input:focus {&lt;br /&gt;
  border-color: #4CAF50;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-input:disabled {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
  color: #999;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-send {&lt;br /&gt;
  padding: 10px 20px;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  background: #4CAF50;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-radius: 0 4px 4px 0;&lt;br /&gt;
  transition: background 0.2s;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-send:hover {&lt;br /&gt;
  background: #43A047;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-send:disabled {&lt;br /&gt;
  background: #a5d6a7;&lt;br /&gt;
  cursor: not-allowed;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-footer {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: space-between;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
  min-height: 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-status {&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #666;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-new {&lt;br /&gt;
  display: none;&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: 1px solid #ccc;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  padding: 4px 12px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-new:hover {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-new.visible {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-error {&lt;br /&gt;
  align-self: center;&lt;br /&gt;
  background: #fef2f2;&lt;br /&gt;
  color: #b00;&lt;br /&gt;
  border: 1px solid #fca5a5;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  padding: 8px 14px;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Tablet */&lt;br /&gt;
@media (max-width: 900px) {&lt;br /&gt;
  .overlay-container {&lt;br /&gt;
    min-height: 340px;&lt;br /&gt;
    padding: 18px;&lt;br /&gt;
    border-radius: 10px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .overlay-content {&lt;br /&gt;
    padding: 16px;&lt;br /&gt;
    border-radius: 10px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Smartphone */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
  .overlay-container {&lt;br /&gt;
    min-height: 280px;&lt;br /&gt;
    padding: 12px;&lt;br /&gt;
    align-items: stretch;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .overlay-content {&lt;br /&gt;
    padding: 14px;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-form {&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    gap: 8px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-input {&lt;br /&gt;
    border-right: 1px solid #ccc;&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-send {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .chat-msg {&lt;br /&gt;
    max-width: 100%;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-footer {&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Kleine Smartphones */&lt;br /&gt;
@media (max-width: 400px) {&lt;br /&gt;
  .overlay-container {&lt;br /&gt;
    min-height: 240px;&lt;br /&gt;
    padding: 10px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .overlay-content {&lt;br /&gt;
    padding: 12px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-messages {&lt;br /&gt;
    max-height: 420px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .chat-msg {&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
    padding: 9px 12px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function() {&lt;br /&gt;
  var form = document.getElementById(&#039;chat-form&#039;);&lt;br /&gt;
  var input = document.getElementById(&#039;chat-input&#039;);&lt;br /&gt;
  var sendBtn = document.getElementById(&#039;chat-send&#039;);&lt;br /&gt;
  var messagesEl = document.getElementById(&#039;chat-messages&#039;);&lt;br /&gt;
  var sourcesPanel = document.getElementById(&#039;chat-sources-panel&#039;);&lt;br /&gt;
  var statusEl = document.getElementById(&#039;chat-status&#039;);&lt;br /&gt;
  var newBtn = document.getElementById(&#039;chat-new&#039;);&lt;br /&gt;
  var apiHost = &#039;api.&#039; + location.hostname.split(&#039;.&#039;).slice(1).join(&#039;.&#039;);&lt;br /&gt;
&lt;br /&gt;
  var conversationId = null;&lt;br /&gt;
  var isLoading = false;&lt;br /&gt;
&lt;br /&gt;
  function escapeHtml(str) {&lt;br /&gt;
    var d = document.createElement(&#039;div&#039;);&lt;br /&gt;
    d.textContent = str;&lt;br /&gt;
    return d.innerHTML;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function truncate(str, len) {&lt;br /&gt;
    if (str.length &amp;lt;= len) return str;&lt;br /&gt;
    return str.substring(0, len).replace(/\\s+\\S*$/, &#039;&#039;) + &#039;\\u2026&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function formatAnswer(text) {&lt;br /&gt;
    var html = escapeHtml(text);&lt;br /&gt;
    html = html.replace(/\\*\\*(.+?)\\*\\*/g, &#039;&amp;lt;strong&amp;gt;$1&amp;lt;/strong&amp;gt;&#039;);&lt;br /&gt;
    var paragraphs = html.split(/\\n{2,}/);&lt;br /&gt;
    if (paragraphs.length &amp;gt; 1) {&lt;br /&gt;
      html = paragraphs.map(function(p) { return &#039;&amp;lt;p&amp;gt;&#039; + p.replace(/\\n/g, &#039;&amp;lt;br&amp;gt;&#039;) + &#039;&amp;lt;/p&amp;gt;&#039;; }).join(&#039;&#039;);&lt;br /&gt;
    } else {&lt;br /&gt;
      html = html.replace(/\\n/g, &#039;&amp;lt;br&amp;gt;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    return html;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addUserMessage(text) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-user&#039;;&lt;br /&gt;
    div.textContent = text;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addAssistantMessage(text) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-assistant&#039;;&lt;br /&gt;
    div.innerHTML = formatAnswer(text);&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addLoadingIndicator() {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-assistant chat-loading-dots&#039;;&lt;br /&gt;
    div.id = &#039;chat-loading&#039;;&lt;br /&gt;
    div.innerHTML = &#039;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function removeLoadingIndicator() {&lt;br /&gt;
    var el = document.getElementById(&#039;chat-loading&#039;);&lt;br /&gt;
    if (el) el.remove();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addError(msg) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-error&#039;;&lt;br /&gt;
    div.textContent = msg;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function scrollToBottom() {&lt;br /&gt;
    messagesEl.scrollTop = messagesEl.scrollHeight;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function renderSources(sources) {&lt;br /&gt;
    if (!sources || sources.length === 0) {&lt;br /&gt;
      sourcesPanel.className = &#039;&#039;;&lt;br /&gt;
      sourcesPanel.innerHTML = &#039;&#039;;&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    sourcesPanel.className = &#039;visible&#039;;&lt;br /&gt;
    var listId = &#039;src-list-&#039; + Date.now();&lt;br /&gt;
    var html = &#039;&amp;lt;button class=&amp;quot;chat-sources-toggle&amp;quot; onclick=&amp;quot;var l=document.getElementById(\\&#039;&#039; + listId + &#039;\\&#039;);l.classList.toggle(\\&#039;open\\&#039;);this.textContent=l.classList.contains(\\&#039;open\\&#039;)?\\&#039;▲ Quellen verbergen\\&#039;:\\&#039;▼ &#039; + sources.length + &#039; Quellen anzeigen\\&#039;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
      + &#039;▼ &#039; + sources.length + &#039; Quellen anzeigen&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
    html += &#039;&amp;lt;div class=&amp;quot;chat-sources-list&amp;quot; id=&amp;quot;&#039; + listId + &#039;&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
    sources.forEach(function(s) {&lt;br /&gt;
      var pct = Math.round((s.similarity_score || 0) * 100);&lt;br /&gt;
      var wikiUrl = &#039;/wiki/&#039; + encodeURIComponent((s.page_title || &#039;&#039;).replace(/ /g, &#039;_&#039;));&lt;br /&gt;
      html += &#039;&amp;lt;div class=&amp;quot;chat-source-item&amp;quot;&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;h5&amp;gt;&amp;lt;a href=&amp;quot;&#039; + wikiUrl + &#039;&amp;quot;&amp;gt;&#039; + escapeHtml(s.page_title || &#039;&#039;) + &#039;&amp;lt;/a&amp;gt;&amp;lt;/h5&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;p class=&amp;quot;chat-source-snippet&amp;quot;&amp;gt;&#039; + escapeHtml(truncate(s.content_text || &#039;&#039;, 150)) + &#039;&amp;lt;/p&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;div class=&amp;quot;chat-source-meta&amp;quot;&amp;gt;Relevanz: &#039; + pct + &#039;% · &#039; + escapeHtml(s.source || &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    });&lt;br /&gt;
    html += &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    sourcesPanel.innerHTML = html;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function setLoading(loading) {&lt;br /&gt;
    isLoading = loading;&lt;br /&gt;
    input.disabled = loading;&lt;br /&gt;
    sendBtn.disabled = loading;&lt;br /&gt;
    if (loading) {&lt;br /&gt;
      addLoadingIndicator();&lt;br /&gt;
    } else {&lt;br /&gt;
      removeLoadingIndicator();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function updateStatus(remaining) {&lt;br /&gt;
    if (remaining &amp;gt; 0) {&lt;br /&gt;
      statusEl.textContent = remaining + &#039; R\\u00fcckfrage&#039; + (remaining !== 1 ? &#039;n&#039; : &#039;&#039;) + &#039; verbleibend&#039;;&lt;br /&gt;
    } else if (remaining === 0) {&lt;br /&gt;
      if (conversationId) {&lt;br /&gt;
        statusEl.textContent = &#039;Keine R\\u00fcckfragen mehr m\\u00f6glich&#039;;&lt;br /&gt;
        input.disabled = true;&lt;br /&gt;
        sendBtn.disabled = true;&lt;br /&gt;
        input.placeholder = &#039;Starte eine neue Unterhaltung&#039;;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    newBtn.className = conversationId ? &#039;visible&#039; : &#039;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function resetConversation() {&lt;br /&gt;
    conversationId = null;&lt;br /&gt;
    messagesEl.innerHTML = &#039;&#039;;&lt;br /&gt;
    sourcesPanel.className = &#039;&#039;;&lt;br /&gt;
    sourcesPanel.innerHTML = &#039;&#039;;&lt;br /&gt;
    statusEl.textContent = &#039;&#039;;&lt;br /&gt;
    newBtn.className = &#039;&#039;;&lt;br /&gt;
    input.disabled = false;&lt;br /&gt;
    sendBtn.disabled = false;&lt;br /&gt;
    input.placeholder = &#039;Stelle eine Frage \\u00fcber M\\u00fcnster \\u2026&#039;;&lt;br /&gt;
    input.focus();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  newBtn.addEventListener(&#039;click&#039;, resetConversation);&lt;br /&gt;
&lt;br /&gt;
  form.addEventListener(&#039;submit&#039;, function(e) {&lt;br /&gt;
    e.preventDefault();&lt;br /&gt;
    if (isLoading) return;&lt;br /&gt;
    var message = input.value.trim();&lt;br /&gt;
    if (!message) return;&lt;br /&gt;
&lt;br /&gt;
    input.value = &#039;&#039;;&lt;br /&gt;
    addUserMessage(message);&lt;br /&gt;
    setLoading(true);&lt;br /&gt;
&lt;br /&gt;
    var body = { message: message };&lt;br /&gt;
    if (conversationId) {&lt;br /&gt;
      body.conversation_id = conversationId;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var url = location.protocol + &#039;//&#039; + apiHost + &#039;/chat&#039;;&lt;br /&gt;
&lt;br /&gt;
    fetch(url, {&lt;br /&gt;
      method: &#039;POST&#039;,&lt;br /&gt;
      headers: { &#039;Content-Type&#039;: &#039;application/json&#039; },&lt;br /&gt;
      body: JSON.stringify(body)&lt;br /&gt;
    })&lt;br /&gt;
      .then(function(res) {&lt;br /&gt;
        if (!res.ok) {&lt;br /&gt;
          return res.json().then(function(data) {&lt;br /&gt;
            throw new Error(data.detail || &#039;HTTP &#039; + res.status);&lt;br /&gt;
          });&lt;br /&gt;
        }&lt;br /&gt;
        return res.json();&lt;br /&gt;
      })&lt;br /&gt;
      .then(function(data) {&lt;br /&gt;
        setLoading(false);&lt;br /&gt;
        conversationId = data.conversation_id;&lt;br /&gt;
        addAssistantMessage(data.answer);&lt;br /&gt;
        renderSources(data.sources);&lt;br /&gt;
        updateStatus(data.remaining_followups);&lt;br /&gt;
        input.focus();&lt;br /&gt;
      })&lt;br /&gt;
      .catch(function(err) {&lt;br /&gt;
        setLoading(false);&lt;br /&gt;
        addError(&#039;Fehler: &#039; + err.message);&lt;br /&gt;
        input.focus();&lt;br /&gt;
      });&lt;br /&gt;
  });&lt;br /&gt;
})();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Widget:StartseitenSuche&amp;diff=1092</id>
		<title>Widget:StartseitenSuche</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Widget:StartseitenSuche&amp;diff=1092"/>
		<updated>2026-04-28T09:31:02Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;overlay-container&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;overlay-content&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;chat-widget&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div id=&amp;quot;chat-messages&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div id=&amp;quot;chat-sources-panel&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;form id=&amp;quot;chat-form&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;chat-input&amp;quot; placeholder=&amp;quot;Stelle eine Frage über Münster …&amp;quot; autocomplete=&amp;quot;off&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;button type=&amp;quot;submit&amp;quot; id=&amp;quot;chat-send&amp;quot;&amp;gt;Fragen&amp;lt;/button&amp;gt;&lt;br /&gt;
      &amp;lt;/form&amp;gt;&lt;br /&gt;
      &amp;lt;div id=&amp;quot;chat-footer&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;span id=&amp;quot;chat-status&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;button id=&amp;quot;chat-new&amp;quot; type=&amp;quot;button&amp;quot;&amp;gt;Neue Unterhaltung&amp;lt;/button&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.overlay-container {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  min-height: 400px;&lt;br /&gt;
  padding: 24px;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  border-radius: 12px;&lt;br /&gt;
  background-color: #ff0000;&lt;br /&gt;
  background-image: url(&amp;quot;/w/images/a/a9/Schloss-Muenster-Philipp-Foelting-CC-BY-SA.jpg&amp;quot;);&lt;br /&gt;
  background-size: cover;&lt;br /&gt;
  background-position: center;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.overlay-container::before {&lt;br /&gt;
  content: &amp;quot;&amp;quot;;&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  inset: 0;&lt;br /&gt;
  background: rgba(0, 0, 0, 0.38);&lt;br /&gt;
  z-index: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.overlay-content {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  z-index: 2;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  max-width: 860px;&lt;br /&gt;
  padding: 20px;&lt;br /&gt;
  border-radius: 12px;&lt;br /&gt;
  background: rgba(255, 255, 255, 0.92);&lt;br /&gt;
  backdrop-filter: blur(4px);&lt;br /&gt;
  -webkit-backdrop-filter: blur(4px);&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-widget {&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  font-family: -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-messages {&lt;br /&gt;
  min-height: 120px;&lt;br /&gt;
  max-height: 500px;&lt;br /&gt;
  overflow-y: auto;&lt;br /&gt;
  padding: 8px 0;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-messages:empty::before {&lt;br /&gt;
  content: &amp;quot;Stelle eine Frage und erhalte Antworten basierend auf dem Münster Wiki.&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  color: #666;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  padding: 40px 16px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg {&lt;br /&gt;
  max-width: 85%;&lt;br /&gt;
  padding: 10px 14px;&lt;br /&gt;
  border-radius: 10px;&lt;br /&gt;
  font-size: 14.5px;&lt;br /&gt;
  line-height: 1.55;&lt;br /&gt;
  word-wrap: break-word;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-user {&lt;br /&gt;
  align-self: flex-end;&lt;br /&gt;
  background: #00308D;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  border-bottom-right-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-assistant {&lt;br /&gt;
  align-self: flex-start;&lt;br /&gt;
  background: #f0f2f5;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  border-bottom-left-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-assistant p {&lt;br /&gt;
  margin: 0 0 8px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-assistant p:last-child {&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@keyframes chatDots {&lt;br /&gt;
  0%, 80%, 100% { opacity: 0.3; }&lt;br /&gt;
  40% { opacity: 1; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-loading-dots span {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  width: 7px;&lt;br /&gt;
  height: 7px;&lt;br /&gt;
  margin: 0 2px;&lt;br /&gt;
  background: #999;&lt;br /&gt;
  border-radius: 50%;&lt;br /&gt;
  animation: chatDots 1.2s ease-in-out infinite;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-loading-dots span:nth-child(2) { animation-delay: 0.15s; }&lt;br /&gt;
.chat-loading-dots span:nth-child(3) { animation-delay: 0.3s; }&lt;br /&gt;
&lt;br /&gt;
#chat-sources-panel {&lt;br /&gt;
  display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-sources-panel.visible {&lt;br /&gt;
  display: block;&lt;br /&gt;
  margin: 4px 0 8px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-sources-toggle {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: 1px solid #ddd;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  padding: 6px 12px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-sources-toggle:hover {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-sources-list {&lt;br /&gt;
  display: none;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-sources-list.open {&lt;br /&gt;
  display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item {&lt;br /&gt;
  padding: 10px 12px;&lt;br /&gt;
  margin-bottom: 6px;&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  transition: border-color 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item:hover {&lt;br /&gt;
  border-color: #b0b8c1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item h5 {&lt;br /&gt;
  margin: 0 0 3px 0;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item h5 a {&lt;br /&gt;
  color: #00308D;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item h5 a:hover {&lt;br /&gt;
  text-decoration: underline;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item .chat-source-snippet {&lt;br /&gt;
  font-size: 12.5px;&lt;br /&gt;
  line-height: 1.45;&lt;br /&gt;
  color: #666;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item .chat-source-meta {&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  color: #999;&lt;br /&gt;
  margin-top: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-form {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-input {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  padding: 10px 14px;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  border: 1px solid #ccc;&lt;br /&gt;
  border-right: none;&lt;br /&gt;
  border-radius: 4px 0 0 4px;&lt;br /&gt;
  outline: none;&lt;br /&gt;
  transition: border-color 0.2s;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  min-width: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-input:focus {&lt;br /&gt;
  border-color: #4CAF50;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-input:disabled {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
  color: #999;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-send {&lt;br /&gt;
  padding: 10px 20px;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  background: #4CAF50;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-radius: 0 4px 4px 0;&lt;br /&gt;
  transition: background 0.2s;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-send:hover {&lt;br /&gt;
  background: #43A047;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-send:disabled {&lt;br /&gt;
  background: #a5d6a7;&lt;br /&gt;
  cursor: not-allowed;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-footer {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: space-between;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
  min-height: 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-status {&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #666;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-new {&lt;br /&gt;
  display: none;&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: 1px solid #ccc;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  padding: 4px 12px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-new:hover {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-new.visible {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-error {&lt;br /&gt;
  align-self: center;&lt;br /&gt;
  background: #fef2f2;&lt;br /&gt;
  color: #b00;&lt;br /&gt;
  border: 1px solid #fca5a5;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  padding: 8px 14px;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Tablet */&lt;br /&gt;
@media (max-width: 900px) {&lt;br /&gt;
  .overlay-container {&lt;br /&gt;
    min-height: 340px;&lt;br /&gt;
    padding: 18px;&lt;br /&gt;
    border-radius: 10px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .overlay-content {&lt;br /&gt;
    padding: 16px;&lt;br /&gt;
    border-radius: 10px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Smartphone */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
  .overlay-container {&lt;br /&gt;
    min-height: 280px;&lt;br /&gt;
    padding: 12px;&lt;br /&gt;
    align-items: stretch;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .overlay-content {&lt;br /&gt;
    padding: 14px;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-form {&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    gap: 8px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-input {&lt;br /&gt;
    border-right: 1px solid #ccc;&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-send {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .chat-msg {&lt;br /&gt;
    max-width: 100%;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-footer {&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Kleine Smartphones */&lt;br /&gt;
@media (max-width: 400px) {&lt;br /&gt;
  .overlay-container {&lt;br /&gt;
    min-height: 240px;&lt;br /&gt;
    padding: 10px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .overlay-content {&lt;br /&gt;
    padding: 12px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-messages {&lt;br /&gt;
    max-height: 420px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .chat-msg {&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
    padding: 9px 12px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function() {&lt;br /&gt;
  var form = document.getElementById(&#039;chat-form&#039;);&lt;br /&gt;
  var input = document.getElementById(&#039;chat-input&#039;);&lt;br /&gt;
  var sendBtn = document.getElementById(&#039;chat-send&#039;);&lt;br /&gt;
  var messagesEl = document.getElementById(&#039;chat-messages&#039;);&lt;br /&gt;
  var sourcesPanel = document.getElementById(&#039;chat-sources-panel&#039;);&lt;br /&gt;
  var statusEl = document.getElementById(&#039;chat-status&#039;);&lt;br /&gt;
  var newBtn = document.getElementById(&#039;chat-new&#039;);&lt;br /&gt;
  var apiHost = &#039;api.&#039; + location.hostname.split(&#039;.&#039;).slice(1).join(&#039;.&#039;);&lt;br /&gt;
&lt;br /&gt;
  var conversationId = null;&lt;br /&gt;
  var isLoading = false;&lt;br /&gt;
&lt;br /&gt;
  function escapeHtml(str) {&lt;br /&gt;
    var d = document.createElement(&#039;div&#039;);&lt;br /&gt;
    d.textContent = str;&lt;br /&gt;
    return d.innerHTML;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function truncate(str, len) {&lt;br /&gt;
    if (str.length &amp;lt;= len) return str;&lt;br /&gt;
    return str.substring(0, len).replace(/\\s+\\S*$/, &#039;&#039;) + &#039;\\u2026&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function formatAnswer(text) {&lt;br /&gt;
    var html = escapeHtml(text);&lt;br /&gt;
    html = html.replace(/\\*\\*(.+?)\\*\\*/g, &#039;&amp;lt;strong&amp;gt;$1&amp;lt;/strong&amp;gt;&#039;);&lt;br /&gt;
    var paragraphs = html.split(/\\n{2,}/);&lt;br /&gt;
    if (paragraphs.length &amp;gt; 1) {&lt;br /&gt;
      html = paragraphs.map(function(p) { return &#039;&amp;lt;p&amp;gt;&#039; + p.replace(/\\n/g, &#039;&amp;lt;br&amp;gt;&#039;) + &#039;&amp;lt;/p&amp;gt;&#039;; }).join(&#039;&#039;);&lt;br /&gt;
    } else {&lt;br /&gt;
      html = html.replace(/\\n/g, &#039;&amp;lt;br&amp;gt;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    return html;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addUserMessage(text) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-user&#039;;&lt;br /&gt;
    div.textContent = text;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addAssistantMessage(text) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-assistant&#039;;&lt;br /&gt;
    div.innerHTML = formatAnswer(text);&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addLoadingIndicator() {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-assistant chat-loading-dots&#039;;&lt;br /&gt;
    div.id = &#039;chat-loading&#039;;&lt;br /&gt;
    div.innerHTML = &#039;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function removeLoadingIndicator() {&lt;br /&gt;
    var el = document.getElementById(&#039;chat-loading&#039;);&lt;br /&gt;
    if (el) el.remove();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addError(msg) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-error&#039;;&lt;br /&gt;
    div.textContent = msg;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function scrollToBottom() {&lt;br /&gt;
    messagesEl.scrollTop = messagesEl.scrollHeight;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function renderSources(sources) {&lt;br /&gt;
    if (!sources || sources.length === 0) {&lt;br /&gt;
      sourcesPanel.className = &#039;&#039;;&lt;br /&gt;
      sourcesPanel.innerHTML = &#039;&#039;;&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    sourcesPanel.className = &#039;visible&#039;;&lt;br /&gt;
    var listId = &#039;src-list-&#039; + Date.now();&lt;br /&gt;
    var html = &#039;&amp;lt;button class=&amp;quot;chat-sources-toggle&amp;quot; onclick=&amp;quot;var l=document.getElementById(\\&#039;&#039; + listId + &#039;\\&#039;);l.classList.toggle(\\&#039;open\\&#039;);this.textContent=l.classList.contains(\\&#039;open\\&#039;)?\\&#039;▲ Quellen verbergen\\&#039;:\\&#039;▼ &#039; + sources.length + &#039; Quellen anzeigen\\&#039;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
      + &#039;▼ &#039; + sources.length + &#039; Quellen anzeigen&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
    html += &#039;&amp;lt;div class=&amp;quot;chat-sources-list&amp;quot; id=&amp;quot;&#039; + listId + &#039;&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
    sources.forEach(function(s) {&lt;br /&gt;
      var pct = Math.round((s.similarity_score || 0) * 100);&lt;br /&gt;
      var wikiUrl = &#039;/wiki/&#039; + encodeURIComponent((s.page_title || &#039;&#039;).replace(/ /g, &#039;_&#039;));&lt;br /&gt;
      html += &#039;&amp;lt;div class=&amp;quot;chat-source-item&amp;quot;&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;h5&amp;gt;&amp;lt;a href=&amp;quot;&#039; + wikiUrl + &#039;&amp;quot;&amp;gt;&#039; + escapeHtml(s.page_title || &#039;&#039;) + &#039;&amp;lt;/a&amp;gt;&amp;lt;/h5&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;p class=&amp;quot;chat-source-snippet&amp;quot;&amp;gt;&#039; + escapeHtml(truncate(s.content_text || &#039;&#039;, 150)) + &#039;&amp;lt;/p&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;div class=&amp;quot;chat-source-meta&amp;quot;&amp;gt;Relevanz: &#039; + pct + &#039;% · &#039; + escapeHtml(s.source || &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    });&lt;br /&gt;
    html += &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    sourcesPanel.innerHTML = html;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function setLoading(loading) {&lt;br /&gt;
    isLoading = loading;&lt;br /&gt;
    input.disabled = loading;&lt;br /&gt;
    sendBtn.disabled = loading;&lt;br /&gt;
    if (loading) {&lt;br /&gt;
      addLoadingIndicator();&lt;br /&gt;
    } else {&lt;br /&gt;
      removeLoadingIndicator();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function updateStatus(remaining) {&lt;br /&gt;
    if (remaining &amp;gt; 0) {&lt;br /&gt;
      statusEl.textContent = remaining + &#039; R\\u00fcckfrage&#039; + (remaining !== 1 ? &#039;n&#039; : &#039;&#039;) + &#039; verbleibend&#039;;&lt;br /&gt;
    } else if (remaining === 0) {&lt;br /&gt;
      if (conversationId) {&lt;br /&gt;
        statusEl.textContent = &#039;Keine R\\u00fcckfragen mehr m\\u00f6glich&#039;;&lt;br /&gt;
        input.disabled = true;&lt;br /&gt;
        sendBtn.disabled = true;&lt;br /&gt;
        input.placeholder = &#039;Starte eine neue Unterhaltung&#039;;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    newBtn.className = conversationId ? &#039;visible&#039; : &#039;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function resetConversation() {&lt;br /&gt;
    conversationId = null;&lt;br /&gt;
    messagesEl.innerHTML = &#039;&#039;;&lt;br /&gt;
    sourcesPanel.className = &#039;&#039;;&lt;br /&gt;
    sourcesPanel.innerHTML = &#039;&#039;;&lt;br /&gt;
    statusEl.textContent = &#039;&#039;;&lt;br /&gt;
    newBtn.className = &#039;&#039;;&lt;br /&gt;
    input.disabled = false;&lt;br /&gt;
    sendBtn.disabled = false;&lt;br /&gt;
    input.placeholder = &#039;Stelle eine Frage \\u00fcber M\\u00fcnster \\u2026&#039;;&lt;br /&gt;
    input.focus();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  newBtn.addEventListener(&#039;click&#039;, resetConversation);&lt;br /&gt;
&lt;br /&gt;
  form.addEventListener(&#039;submit&#039;, function(e) {&lt;br /&gt;
    e.preventDefault();&lt;br /&gt;
    if (isLoading) return;&lt;br /&gt;
    var message = input.value.trim();&lt;br /&gt;
    if (!message) return;&lt;br /&gt;
&lt;br /&gt;
    input.value = &#039;&#039;;&lt;br /&gt;
    addUserMessage(message);&lt;br /&gt;
    setLoading(true);&lt;br /&gt;
&lt;br /&gt;
    var body = { message: message };&lt;br /&gt;
    if (conversationId) {&lt;br /&gt;
      body.conversation_id = conversationId;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var url = location.protocol + &#039;//&#039; + apiHost + &#039;/chat&#039;;&lt;br /&gt;
&lt;br /&gt;
    fetch(url, {&lt;br /&gt;
      method: &#039;POST&#039;,&lt;br /&gt;
      headers: { &#039;Content-Type&#039;: &#039;application/json&#039; },&lt;br /&gt;
      body: JSON.stringify(body)&lt;br /&gt;
    })&lt;br /&gt;
      .then(function(res) {&lt;br /&gt;
        if (!res.ok) {&lt;br /&gt;
          return res.json().then(function(data) {&lt;br /&gt;
            throw new Error(data.detail || &#039;HTTP &#039; + res.status);&lt;br /&gt;
          });&lt;br /&gt;
        }&lt;br /&gt;
        return res.json();&lt;br /&gt;
      })&lt;br /&gt;
      .then(function(data) {&lt;br /&gt;
        setLoading(false);&lt;br /&gt;
        conversationId = data.conversation_id;&lt;br /&gt;
        addAssistantMessage(data.answer);&lt;br /&gt;
        renderSources(data.sources);&lt;br /&gt;
        updateStatus(data.remaining_followups);&lt;br /&gt;
        input.focus();&lt;br /&gt;
      })&lt;br /&gt;
      .catch(function(err) {&lt;br /&gt;
        setLoading(false);&lt;br /&gt;
        addError(&#039;Fehler: &#039; + err.message);&lt;br /&gt;
        input.focus();&lt;br /&gt;
      });&lt;br /&gt;
  });&lt;br /&gt;
})();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Widget:StartseitenSuche&amp;diff=1091</id>
		<title>Widget:StartseitenSuche</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Widget:StartseitenSuche&amp;diff=1091"/>
		<updated>2026-04-28T09:20:46Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;overlay-container&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;overlay-content&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;chat-widget&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div id=&amp;quot;chat-messages&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;div id=&amp;quot;chat-sources-panel&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;form id=&amp;quot;chat-form&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;chat-input&amp;quot; placeholder=&amp;quot;Stelle eine Frage über Münster …&amp;quot; autocomplete=&amp;quot;off&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;button type=&amp;quot;submit&amp;quot; id=&amp;quot;chat-send&amp;quot;&amp;gt;Fragen&amp;lt;/button&amp;gt;&lt;br /&gt;
      &amp;lt;/form&amp;gt;&lt;br /&gt;
      &amp;lt;div id=&amp;quot;chat-footer&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;span id=&amp;quot;chat-status&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;button id=&amp;quot;chat-new&amp;quot; type=&amp;quot;button&amp;quot;&amp;gt;Neue Unterhaltung&amp;lt;/button&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
.overlay-container {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  min-height: 400px;&lt;br /&gt;
  padding: 24px;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  border-radius: 12px;&lt;br /&gt;
  background-color: #2f3e46;&lt;br /&gt;
  background-image: url(&amp;quot;/w/images/a/a9/Schloss-Muenster-Philipp-Foelting-CC-BY-SA.jpg&amp;quot;);&lt;br /&gt;
  background-size: cover;&lt;br /&gt;
  background-position: center;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.overlay-container::before {&lt;br /&gt;
  content: &amp;quot;&amp;quot;;&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  inset: 0;&lt;br /&gt;
  background: rgba(0, 0, 0, 0.38);&lt;br /&gt;
  z-index: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.overlay-content {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  z-index: 2;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  max-width: 860px;&lt;br /&gt;
  padding: 20px;&lt;br /&gt;
  border-radius: 12px;&lt;br /&gt;
  background: rgba(255, 255, 255, 0.92);&lt;br /&gt;
  backdrop-filter: blur(4px);&lt;br /&gt;
  -webkit-backdrop-filter: blur(4px);&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-widget {&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  font-family: -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-messages {&lt;br /&gt;
  min-height: 120px;&lt;br /&gt;
  max-height: 500px;&lt;br /&gt;
  overflow-y: auto;&lt;br /&gt;
  padding: 8px 0;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-messages:empty::before {&lt;br /&gt;
  content: &amp;quot;Stelle eine Frage und erhalte Antworten basierend auf dem Münster Wiki.&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  color: #666;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  padding: 40px 16px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg {&lt;br /&gt;
  max-width: 85%;&lt;br /&gt;
  padding: 10px 14px;&lt;br /&gt;
  border-radius: 10px;&lt;br /&gt;
  font-size: 14.5px;&lt;br /&gt;
  line-height: 1.55;&lt;br /&gt;
  word-wrap: break-word;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-user {&lt;br /&gt;
  align-self: flex-end;&lt;br /&gt;
  background: #00308D;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  border-bottom-right-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-assistant {&lt;br /&gt;
  align-self: flex-start;&lt;br /&gt;
  background: #f0f2f5;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  border-bottom-left-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-assistant p {&lt;br /&gt;
  margin: 0 0 8px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-assistant p:last-child {&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@keyframes chatDots {&lt;br /&gt;
  0%, 80%, 100% { opacity: 0.3; }&lt;br /&gt;
  40% { opacity: 1; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-loading-dots span {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  width: 7px;&lt;br /&gt;
  height: 7px;&lt;br /&gt;
  margin: 0 2px;&lt;br /&gt;
  background: #999;&lt;br /&gt;
  border-radius: 50%;&lt;br /&gt;
  animation: chatDots 1.2s ease-in-out infinite;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-loading-dots span:nth-child(2) { animation-delay: 0.15s; }&lt;br /&gt;
.chat-loading-dots span:nth-child(3) { animation-delay: 0.3s; }&lt;br /&gt;
&lt;br /&gt;
#chat-sources-panel {&lt;br /&gt;
  display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-sources-panel.visible {&lt;br /&gt;
  display: block;&lt;br /&gt;
  margin: 4px 0 8px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-sources-toggle {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: 1px solid #ddd;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  padding: 6px 12px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-sources-toggle:hover {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-sources-list {&lt;br /&gt;
  display: none;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-sources-list.open {&lt;br /&gt;
  display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item {&lt;br /&gt;
  padding: 10px 12px;&lt;br /&gt;
  margin-bottom: 6px;&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  transition: border-color 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item:hover {&lt;br /&gt;
  border-color: #b0b8c1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item h5 {&lt;br /&gt;
  margin: 0 0 3px 0;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item h5 a {&lt;br /&gt;
  color: #00308D;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item h5 a:hover {&lt;br /&gt;
  text-decoration: underline;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item .chat-source-snippet {&lt;br /&gt;
  font-size: 12.5px;&lt;br /&gt;
  line-height: 1.45;&lt;br /&gt;
  color: #666;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-source-item .chat-source-meta {&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  color: #999;&lt;br /&gt;
  margin-top: 3px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-form {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-input {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  padding: 10px 14px;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  border: 1px solid #ccc;&lt;br /&gt;
  border-right: none;&lt;br /&gt;
  border-radius: 4px 0 0 4px;&lt;br /&gt;
  outline: none;&lt;br /&gt;
  transition: border-color 0.2s;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  min-width: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-input:focus {&lt;br /&gt;
  border-color: #4CAF50;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-input:disabled {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
  color: #999;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-send {&lt;br /&gt;
  padding: 10px 20px;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  background: #4CAF50;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-radius: 0 4px 4px 0;&lt;br /&gt;
  transition: background 0.2s;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-send:hover {&lt;br /&gt;
  background: #43A047;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-send:disabled {&lt;br /&gt;
  background: #a5d6a7;&lt;br /&gt;
  cursor: not-allowed;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-footer {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: space-between;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
  min-height: 28px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-status {&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #666;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-new {&lt;br /&gt;
  display: none;&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: 1px solid #ccc;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  padding: 4px 12px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-new:hover {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-new.visible {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.chat-msg-error {&lt;br /&gt;
  align-self: center;&lt;br /&gt;
  background: #fef2f2;&lt;br /&gt;
  color: #b00;&lt;br /&gt;
  border: 1px solid #fca5a5;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  padding: 8px 14px;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Tablet */&lt;br /&gt;
@media (max-width: 900px) {&lt;br /&gt;
  .overlay-container {&lt;br /&gt;
    min-height: 340px;&lt;br /&gt;
    padding: 18px;&lt;br /&gt;
    border-radius: 10px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .overlay-content {&lt;br /&gt;
    padding: 16px;&lt;br /&gt;
    border-radius: 10px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Smartphone */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
  .overlay-container {&lt;br /&gt;
    min-height: 280px;&lt;br /&gt;
    padding: 12px;&lt;br /&gt;
    align-items: stretch;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .overlay-content {&lt;br /&gt;
    padding: 14px;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-form {&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    gap: 8px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-input {&lt;br /&gt;
    border-right: 1px solid #ccc;&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-send {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    border-radius: 4px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .chat-msg {&lt;br /&gt;
    max-width: 100%;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-footer {&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    align-items: flex-start;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Kleine Smartphones */&lt;br /&gt;
@media (max-width: 400px) {&lt;br /&gt;
  .overlay-container {&lt;br /&gt;
    min-height: 240px;&lt;br /&gt;
    padding: 10px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .overlay-content {&lt;br /&gt;
    padding: 12px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  #chat-messages {&lt;br /&gt;
    max-height: 420px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .chat-msg {&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
    padding: 9px 12px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function() {&lt;br /&gt;
  var form = document.getElementById(&#039;chat-form&#039;);&lt;br /&gt;
  var input = document.getElementById(&#039;chat-input&#039;);&lt;br /&gt;
  var sendBtn = document.getElementById(&#039;chat-send&#039;);&lt;br /&gt;
  var messagesEl = document.getElementById(&#039;chat-messages&#039;);&lt;br /&gt;
  var sourcesPanel = document.getElementById(&#039;chat-sources-panel&#039;);&lt;br /&gt;
  var statusEl = document.getElementById(&#039;chat-status&#039;);&lt;br /&gt;
  var newBtn = document.getElementById(&#039;chat-new&#039;);&lt;br /&gt;
  var apiHost = &#039;api.&#039; + location.hostname.split(&#039;.&#039;).slice(1).join(&#039;.&#039;);&lt;br /&gt;
&lt;br /&gt;
  var conversationId = null;&lt;br /&gt;
  var isLoading = false;&lt;br /&gt;
&lt;br /&gt;
  function escapeHtml(str) {&lt;br /&gt;
    var d = document.createElement(&#039;div&#039;);&lt;br /&gt;
    d.textContent = str;&lt;br /&gt;
    return d.innerHTML;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function truncate(str, len) {&lt;br /&gt;
    if (str.length &amp;lt;= len) return str;&lt;br /&gt;
    return str.substring(0, len).replace(/\\s+\\S*$/, &#039;&#039;) + &#039;\\u2026&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function formatAnswer(text) {&lt;br /&gt;
    var html = escapeHtml(text);&lt;br /&gt;
    html = html.replace(/\\*\\*(.+?)\\*\\*/g, &#039;&amp;lt;strong&amp;gt;$1&amp;lt;/strong&amp;gt;&#039;);&lt;br /&gt;
    var paragraphs = html.split(/\\n{2,}/);&lt;br /&gt;
    if (paragraphs.length &amp;gt; 1) {&lt;br /&gt;
      html = paragraphs.map(function(p) { return &#039;&amp;lt;p&amp;gt;&#039; + p.replace(/\\n/g, &#039;&amp;lt;br&amp;gt;&#039;) + &#039;&amp;lt;/p&amp;gt;&#039;; }).join(&#039;&#039;);&lt;br /&gt;
    } else {&lt;br /&gt;
      html = html.replace(/\\n/g, &#039;&amp;lt;br&amp;gt;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    return html;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addUserMessage(text) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-user&#039;;&lt;br /&gt;
    div.textContent = text;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addAssistantMessage(text) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-assistant&#039;;&lt;br /&gt;
    div.innerHTML = formatAnswer(text);&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addLoadingIndicator() {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-assistant chat-loading-dots&#039;;&lt;br /&gt;
    div.id = &#039;chat-loading&#039;;&lt;br /&gt;
    div.innerHTML = &#039;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function removeLoadingIndicator() {&lt;br /&gt;
    var el = document.getElementById(&#039;chat-loading&#039;);&lt;br /&gt;
    if (el) el.remove();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addError(msg) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-error&#039;;&lt;br /&gt;
    div.textContent = msg;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function scrollToBottom() {&lt;br /&gt;
    messagesEl.scrollTop = messagesEl.scrollHeight;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function renderSources(sources) {&lt;br /&gt;
    if (!sources || sources.length === 0) {&lt;br /&gt;
      sourcesPanel.className = &#039;&#039;;&lt;br /&gt;
      sourcesPanel.innerHTML = &#039;&#039;;&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    sourcesPanel.className = &#039;visible&#039;;&lt;br /&gt;
    var listId = &#039;src-list-&#039; + Date.now();&lt;br /&gt;
    var html = &#039;&amp;lt;button class=&amp;quot;chat-sources-toggle&amp;quot; onclick=&amp;quot;var l=document.getElementById(\\&#039;&#039; + listId + &#039;\\&#039;);l.classList.toggle(\\&#039;open\\&#039;);this.textContent=l.classList.contains(\\&#039;open\\&#039;)?\\&#039;▲ Quellen verbergen\\&#039;:\\&#039;▼ &#039; + sources.length + &#039; Quellen anzeigen\\&#039;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
      + &#039;▼ &#039; + sources.length + &#039; Quellen anzeigen&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
    html += &#039;&amp;lt;div class=&amp;quot;chat-sources-list&amp;quot; id=&amp;quot;&#039; + listId + &#039;&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
    sources.forEach(function(s) {&lt;br /&gt;
      var pct = Math.round((s.similarity_score || 0) * 100);&lt;br /&gt;
      var wikiUrl = &#039;/wiki/&#039; + encodeURIComponent((s.page_title || &#039;&#039;).replace(/ /g, &#039;_&#039;));&lt;br /&gt;
      html += &#039;&amp;lt;div class=&amp;quot;chat-source-item&amp;quot;&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;h5&amp;gt;&amp;lt;a href=&amp;quot;&#039; + wikiUrl + &#039;&amp;quot;&amp;gt;&#039; + escapeHtml(s.page_title || &#039;&#039;) + &#039;&amp;lt;/a&amp;gt;&amp;lt;/h5&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;p class=&amp;quot;chat-source-snippet&amp;quot;&amp;gt;&#039; + escapeHtml(truncate(s.content_text || &#039;&#039;, 150)) + &#039;&amp;lt;/p&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;div class=&amp;quot;chat-source-meta&amp;quot;&amp;gt;Relevanz: &#039; + pct + &#039;% · &#039; + escapeHtml(s.source || &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    });&lt;br /&gt;
    html += &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    sourcesPanel.innerHTML = html;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function setLoading(loading) {&lt;br /&gt;
    isLoading = loading;&lt;br /&gt;
    input.disabled = loading;&lt;br /&gt;
    sendBtn.disabled = loading;&lt;br /&gt;
    if (loading) {&lt;br /&gt;
      addLoadingIndicator();&lt;br /&gt;
    } else {&lt;br /&gt;
      removeLoadingIndicator();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function updateStatus(remaining) {&lt;br /&gt;
    if (remaining &amp;gt; 0) {&lt;br /&gt;
      statusEl.textContent = remaining + &#039; R\\u00fcckfrage&#039; + (remaining !== 1 ? &#039;n&#039; : &#039;&#039;) + &#039; verbleibend&#039;;&lt;br /&gt;
    } else if (remaining === 0) {&lt;br /&gt;
      if (conversationId) {&lt;br /&gt;
        statusEl.textContent = &#039;Keine R\\u00fcckfragen mehr m\\u00f6glich&#039;;&lt;br /&gt;
        input.disabled = true;&lt;br /&gt;
        sendBtn.disabled = true;&lt;br /&gt;
        input.placeholder = &#039;Starte eine neue Unterhaltung&#039;;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    newBtn.className = conversationId ? &#039;visible&#039; : &#039;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function resetConversation() {&lt;br /&gt;
    conversationId = null;&lt;br /&gt;
    messagesEl.innerHTML = &#039;&#039;;&lt;br /&gt;
    sourcesPanel.className = &#039;&#039;;&lt;br /&gt;
    sourcesPanel.innerHTML = &#039;&#039;;&lt;br /&gt;
    statusEl.textContent = &#039;&#039;;&lt;br /&gt;
    newBtn.className = &#039;&#039;;&lt;br /&gt;
    input.disabled = false;&lt;br /&gt;
    sendBtn.disabled = false;&lt;br /&gt;
    input.placeholder = &#039;Stelle eine Frage \\u00fcber M\\u00fcnster \\u2026&#039;;&lt;br /&gt;
    input.focus();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  newBtn.addEventListener(&#039;click&#039;, resetConversation);&lt;br /&gt;
&lt;br /&gt;
  form.addEventListener(&#039;submit&#039;, function(e) {&lt;br /&gt;
    e.preventDefault();&lt;br /&gt;
    if (isLoading) return;&lt;br /&gt;
    var message = input.value.trim();&lt;br /&gt;
    if (!message) return;&lt;br /&gt;
&lt;br /&gt;
    input.value = &#039;&#039;;&lt;br /&gt;
    addUserMessage(message);&lt;br /&gt;
    setLoading(true);&lt;br /&gt;
&lt;br /&gt;
    var body = { message: message };&lt;br /&gt;
    if (conversationId) {&lt;br /&gt;
      body.conversation_id = conversationId;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var url = location.protocol + &#039;//&#039; + apiHost + &#039;/chat&#039;;&lt;br /&gt;
&lt;br /&gt;
    fetch(url, {&lt;br /&gt;
      method: &#039;POST&#039;,&lt;br /&gt;
      headers: { &#039;Content-Type&#039;: &#039;application/json&#039; },&lt;br /&gt;
      body: JSON.stringify(body)&lt;br /&gt;
    })&lt;br /&gt;
      .then(function(res) {&lt;br /&gt;
        if (!res.ok) {&lt;br /&gt;
          return res.json().then(function(data) {&lt;br /&gt;
            throw new Error(data.detail || &#039;HTTP &#039; + res.status);&lt;br /&gt;
          });&lt;br /&gt;
        }&lt;br /&gt;
        return res.json();&lt;br /&gt;
      })&lt;br /&gt;
      .then(function(data) {&lt;br /&gt;
        setLoading(false);&lt;br /&gt;
        conversationId = data.conversation_id;&lt;br /&gt;
        addAssistantMessage(data.answer);&lt;br /&gt;
        renderSources(data.sources);&lt;br /&gt;
        updateStatus(data.remaining_followups);&lt;br /&gt;
        input.focus();&lt;br /&gt;
      })&lt;br /&gt;
      .catch(function(err) {&lt;br /&gt;
        setLoading(false);&lt;br /&gt;
        addError(&#039;Fehler: &#039; + err.message);&lt;br /&gt;
        input.focus();&lt;br /&gt;
      });&lt;br /&gt;
  });&lt;br /&gt;
})();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Widget:StartseitenSuche&amp;diff=1090</id>
		<title>Widget:StartseitenSuche</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Widget:StartseitenSuche&amp;diff=1090"/>
		<updated>2026-04-28T09:14:00Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Overlay-Container mit responsive Hintergrundbild */&lt;br /&gt;
.overlay-container {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  min-height: 400px;&lt;br /&gt;
  padding: 24px;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  border-radius: 12px;&lt;br /&gt;
  background-color: #2f3e46; /* Fallback-Farbe während das Bild lädt */&lt;br /&gt;
  background-image: url(&amp;quot;/w/images/a/a9/Schloss-Muenster-Philipp-Foelting-CC-BY-SA.jpg&amp;quot;);&lt;br /&gt;
  background-size: cover;&lt;br /&gt;
  background-position: center;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Dunkles Overlay für bessere Lesbarkeit */&lt;br /&gt;
.overlay-container::before {&lt;br /&gt;
  content: &amp;quot;&amp;quot;;&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  inset: 0;&lt;br /&gt;
  background: rgba(0, 0, 0, 0.38);&lt;br /&gt;
  z-index: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Inhalt über dem Overlay */&lt;br /&gt;
.overlay-content {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  z-index: 2;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  max-width: 800px;&lt;br /&gt;
  padding: 20px;&lt;br /&gt;
  border-radius: 12px;&lt;br /&gt;
  background: rgba(255, 255, 255, 0.92);&lt;br /&gt;
  backdrop-filter: blur(4px);&lt;br /&gt;
  -webkit-backdrop-filter: blur(4px);&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Falls dein Chat direkt darin liegt */&lt;br /&gt;
.overlay-content #chat-widget {&lt;br /&gt;
  max-width: 100%;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
  border-radius: 12px;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Tablet */&lt;br /&gt;
@media (max-width: 900px) {&lt;br /&gt;
  .overlay-container {&lt;br /&gt;
    min-height: 340px;&lt;br /&gt;
    padding: 18px;&lt;br /&gt;
    border-radius: 10px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .overlay-content {&lt;br /&gt;
    padding: 16px;&lt;br /&gt;
    border-radius: 10px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Smartphone */&lt;br /&gt;
@media (max-width: 600px) {&lt;br /&gt;
  .overlay-container {&lt;br /&gt;
    min-height: 280px;&lt;br /&gt;
    padding: 12px;&lt;br /&gt;
    align-items: stretch;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .overlay-content {&lt;br /&gt;
    padding: 14px;&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Kleine Smartphones */&lt;br /&gt;
@media (max-width: 400px) {&lt;br /&gt;
  .overlay-container {&lt;br /&gt;
    min-height: 240px;&lt;br /&gt;
    padding: 10px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .overlay-content {&lt;br /&gt;
    padding: 12px;&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Widget:StartseitenSuche&amp;diff=1089</id>
		<title>Widget:StartseitenSuche</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Widget:StartseitenSuche&amp;diff=1089"/>
		<updated>2026-04-28T09:08:33Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;chat-widget&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;chat-messages&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;chat-sources-panel&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;form id=&amp;quot;chat-form&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;chat-input&amp;quot; placeholder=&amp;quot;Stelle eine Frage über Münster …&amp;quot; autocomplete=&amp;quot;off&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;button type=&amp;quot;submit&amp;quot; id=&amp;quot;chat-send&amp;quot;&amp;gt;Fragen&amp;lt;/button&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;chat-footer&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;span id=&amp;quot;chat-status&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;button id=&amp;quot;chat-new&amp;quot; type=&amp;quot;button&amp;quot;&amp;gt;Neue Unterhaltung&amp;lt;/button&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
#chat-widget {&lt;br /&gt;
  max-width: 800px;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  font-family: -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
&lt;br /&gt;
.overlay-container {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  background-image:url(&amp;quot;/w/images/a/a9/Schloss-Muenster-Philipp-Foelting-CC-BY-SA.jpg&amp;quot;);&lt;br /&gt;
  background-size: cover;&lt;br /&gt;
  background-position: center;&lt;br /&gt;
  min-height:400px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#chat-messages {&lt;br /&gt;
  min-height: 120px;&lt;br /&gt;
  max-height: 500px;&lt;br /&gt;
  overflow-y: auto;&lt;br /&gt;
  padding: 8px 0;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
}&lt;br /&gt;
#chat-messages:empty::before {&lt;br /&gt;
  content: &amp;quot;Stelle eine Frage und erhalte Antworten basierend auf dem Münster Wiki und ausgewählten Seiten. Beachte: KI-Suche kann Fehler enthalten. Bitte prüfe die Ergebnisse. Personenbezogenen Daten können zur Optimierung der KI-Suche genutzt werden.&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  color: #999;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  padding: 40px 16px;&lt;br /&gt;
}&lt;br /&gt;
.chat-msg {&lt;br /&gt;
  max-width: 85%;&lt;br /&gt;
  padding: 10px 14px;&lt;br /&gt;
  border-radius: 10px;&lt;br /&gt;
  font-size: 14.5px;&lt;br /&gt;
  line-height: 1.55;&lt;br /&gt;
  word-wrap: break-word;&lt;br /&gt;
}&lt;br /&gt;
.chat-msg-user {&lt;br /&gt;
  align-self: flex-end;&lt;br /&gt;
  background: #00308D;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  border-bottom-right-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
.chat-msg-assistant {&lt;br /&gt;
  align-self: flex-start;&lt;br /&gt;
  background: #f0f2f5;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  border-bottom-left-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
.chat-msg-assistant p {&lt;br /&gt;
  margin: 0 0 8px 0;&lt;br /&gt;
}&lt;br /&gt;
.chat-msg-assistant p:last-child {&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
@keyframes chatDots {&lt;br /&gt;
  0%, 80%, 100% { opacity: 0.3; }&lt;br /&gt;
  40% { opacity: 1; }&lt;br /&gt;
}&lt;br /&gt;
.chat-loading-dots span {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  width: 7px;&lt;br /&gt;
  height: 7px;&lt;br /&gt;
  margin: 0 2px;&lt;br /&gt;
  background: #999;&lt;br /&gt;
  border-radius: 50%;&lt;br /&gt;
  animation: chatDots 1.2s ease-in-out infinite;&lt;br /&gt;
}&lt;br /&gt;
.chat-loading-dots span:nth-child(2) { animation-delay: 0.15s; }&lt;br /&gt;
.chat-loading-dots span:nth-child(3) { animation-delay: 0.3s; }&lt;br /&gt;
#chat-sources-panel {&lt;br /&gt;
  display: none;&lt;br /&gt;
}&lt;br /&gt;
#chat-sources-panel.visible {&lt;br /&gt;
  display: block;&lt;br /&gt;
  margin: 4px 0 8px 0;&lt;br /&gt;
}&lt;br /&gt;
.chat-sources-toggle {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: 1px solid #ddd;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  padding: 6px 12px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.chat-sources-toggle:hover {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
}&lt;br /&gt;
.chat-sources-list {&lt;br /&gt;
  display: none;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
}&lt;br /&gt;
.chat-sources-list.open {&lt;br /&gt;
  display: block;&lt;br /&gt;
}&lt;br /&gt;
.chat-source-item {&lt;br /&gt;
  padding: 10px 12px;&lt;br /&gt;
  margin-bottom: 6px;&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  transition: border-color 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.chat-source-item:hover {&lt;br /&gt;
  border-color: #b0b8c1;&lt;br /&gt;
}&lt;br /&gt;
.chat-source-item h5 {&lt;br /&gt;
  margin: 0 0 3px 0;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
.chat-source-item h5 a {&lt;br /&gt;
  color: #00308D;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
.chat-source-item h5 a:hover {&lt;br /&gt;
  text-decoration: underline;&lt;br /&gt;
}&lt;br /&gt;
.chat-source-item .chat-source-snippet {&lt;br /&gt;
  font-size: 12.5px;&lt;br /&gt;
  line-height: 1.45;&lt;br /&gt;
  color: #666;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.chat-source-item .chat-source-meta {&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  color: #999;&lt;br /&gt;
  margin-top: 3px;&lt;br /&gt;
}&lt;br /&gt;
#chat-form {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
}&lt;br /&gt;
#chat-input {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  padding: 10px 14px;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  border: 1px solid #ccc;&lt;br /&gt;
  border-right: none;&lt;br /&gt;
  border-radius: 4px 0 0 4px;&lt;br /&gt;
  outline: none;&lt;br /&gt;
  transition: border-color 0.2s;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
}&lt;br /&gt;
#chat-input:focus {&lt;br /&gt;
  border-color: #4CAF50;&lt;br /&gt;
}&lt;br /&gt;
#chat-input:disabled {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
  color: #999;&lt;br /&gt;
}&lt;br /&gt;
#chat-send {&lt;br /&gt;
  padding: 10px 20px;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  background: #4CAF50;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-radius: 0 4px 4px 0;&lt;br /&gt;
  transition: background 0.2s;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
#chat-send:hover {&lt;br /&gt;
  background: #43A047;&lt;br /&gt;
}&lt;br /&gt;
#chat-send:disabled {&lt;br /&gt;
  background: #a5d6a7;&lt;br /&gt;
  cursor: not-allowed;&lt;br /&gt;
}&lt;br /&gt;
#chat-footer {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: space-between;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
  min-height: 28px;&lt;br /&gt;
}&lt;br /&gt;
#chat-status {&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #888;&lt;br /&gt;
}&lt;br /&gt;
#chat-new {&lt;br /&gt;
  display: none;&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: 1px solid #ccc;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  padding: 4px 12px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
#chat-new:hover {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
}&lt;br /&gt;
#chat-new.visible {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
}&lt;br /&gt;
.chat-msg-error {&lt;br /&gt;
  align-self: center;&lt;br /&gt;
  background: #fef2f2;&lt;br /&gt;
  color: #b00;&lt;br /&gt;
  border: 1px solid #fca5a5;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  padding: 8px 14px;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function() {&lt;br /&gt;
  var form = document.getElementById(&#039;chat-form&#039;);&lt;br /&gt;
  var input = document.getElementById(&#039;chat-input&#039;);&lt;br /&gt;
  var sendBtn = document.getElementById(&#039;chat-send&#039;);&lt;br /&gt;
  var messagesEl = document.getElementById(&#039;chat-messages&#039;);&lt;br /&gt;
  var sourcesPanel = document.getElementById(&#039;chat-sources-panel&#039;);&lt;br /&gt;
  var statusEl = document.getElementById(&#039;chat-status&#039;);&lt;br /&gt;
  var newBtn = document.getElementById(&#039;chat-new&#039;);&lt;br /&gt;
  var apiHost = &#039;api.&#039; + location.hostname.split(&#039;.&#039;).slice(1).join(&#039;.&#039;);&lt;br /&gt;
&lt;br /&gt;
  var conversationId = null;&lt;br /&gt;
  var isLoading = false;&lt;br /&gt;
&lt;br /&gt;
  function escapeHtml(str) {&lt;br /&gt;
    var d = document.createElement(&#039;div&#039;);&lt;br /&gt;
    d.textContent = str;&lt;br /&gt;
    return d.innerHTML;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function truncate(str, len) {&lt;br /&gt;
    if (str.length &amp;lt;= len) return str;&lt;br /&gt;
    return str.substring(0, len).replace(/\s+\S*$/, &#039;&#039;) + &#039;\u2026&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function formatAnswer(text) {&lt;br /&gt;
    var html = escapeHtml(text);&lt;br /&gt;
    html = html.replace(/\*\*(.+?)\*\*/g, &#039;&amp;lt;strong&amp;gt;$1&amp;lt;/strong&amp;gt;&#039;);&lt;br /&gt;
    var paragraphs = html.split(/\n{2,}/);&lt;br /&gt;
    if (paragraphs.length &amp;gt; 1) {&lt;br /&gt;
      html = paragraphs.map(function(p) { return &#039;&amp;lt;p&amp;gt;&#039; + p.replace(/\n/g, &#039;&amp;lt;br&amp;gt;&#039;) + &#039;&amp;lt;/p&amp;gt;&#039;; }).join(&#039;&#039;);&lt;br /&gt;
    } else {&lt;br /&gt;
      html = html.replace(/\n/g, &#039;&amp;lt;br&amp;gt;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    return html;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addUserMessage(text) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-user&#039;;&lt;br /&gt;
    div.textContent = text;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addAssistantMessage(text) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-assistant&#039;;&lt;br /&gt;
    div.innerHTML = formatAnswer(text);&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addLoadingIndicator() {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-assistant chat-loading-dots&#039;;&lt;br /&gt;
    div.id = &#039;chat-loading&#039;;&lt;br /&gt;
    div.innerHTML = &#039;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function removeLoadingIndicator() {&lt;br /&gt;
    var el = document.getElementById(&#039;chat-loading&#039;);&lt;br /&gt;
    if (el) el.remove();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addError(msg) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-error&#039;;&lt;br /&gt;
    div.textContent = msg;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function scrollToBottom() {&lt;br /&gt;
    messagesEl.scrollTop = messagesEl.scrollHeight;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function renderSources(sources) {&lt;br /&gt;
    if (!sources || sources.length === 0) {&lt;br /&gt;
      sourcesPanel.className = &#039;&#039;;&lt;br /&gt;
      sourcesPanel.innerHTML = &#039;&#039;;&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    sourcesPanel.className = &#039;visible&#039;;&lt;br /&gt;
    var listId = &#039;src-list-&#039; + Date.now();&lt;br /&gt;
    var html = &#039;&amp;lt;button class=&amp;quot;chat-sources-toggle&amp;quot; onclick=&amp;quot;var l=document.getElementById(\&#039;&#039; + listId + &#039;\&#039;);l.classList.toggle(\&#039;open\&#039;);this.textContent=l.classList.contains(\&#039;open\&#039;)?\&#039;▲ Quellen verbergen\&#039;:\&#039;▼ &#039; + sources.length + &#039; Quellen anzeigen\&#039;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
      + &#039;▼ &#039; + sources.length + &#039; Quellen anzeigen&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
    html += &#039;&amp;lt;div class=&amp;quot;chat-sources-list&amp;quot; id=&amp;quot;&#039; + listId + &#039;&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
    sources.forEach(function(s) {&lt;br /&gt;
      var pct = Math.round((s.similarity_score || 0) * 100);&lt;br /&gt;
      var wikiUrl = &#039;/wiki/&#039; + encodeURIComponent((s.page_title || &#039;&#039;).replace(/ /g, &#039;_&#039;));&lt;br /&gt;
      html += &#039;&amp;lt;div class=&amp;quot;chat-source-item&amp;quot;&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;h5&amp;gt;&amp;lt;a href=&amp;quot;&#039; + wikiUrl + &#039;&amp;quot;&amp;gt;&#039; + escapeHtml(s.page_title || &#039;&#039;) + &#039;&amp;lt;/a&amp;gt;&amp;lt;/h5&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;p class=&amp;quot;chat-source-snippet&amp;quot;&amp;gt;&#039; + escapeHtml(truncate(s.content_text || &#039;&#039;, 150)) + &#039;&amp;lt;/p&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;div class=&amp;quot;chat-source-meta&amp;quot;&amp;gt;Relevanz: &#039; + pct + &#039;% · &#039; + escapeHtml(s.source || &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    });&lt;br /&gt;
    html += &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    sourcesPanel.innerHTML = html;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function setLoading(loading) {&lt;br /&gt;
    isLoading = loading;&lt;br /&gt;
    input.disabled = loading;&lt;br /&gt;
    sendBtn.disabled = loading;&lt;br /&gt;
    if (loading) {&lt;br /&gt;
      addLoadingIndicator();&lt;br /&gt;
    } else {&lt;br /&gt;
      removeLoadingIndicator();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function updateStatus(remaining) {&lt;br /&gt;
    if (remaining &amp;gt; 0) {&lt;br /&gt;
      statusEl.textContent = remaining + &#039; R\u00fcckfrage&#039; + (remaining !== 1 ? &#039;n&#039; : &#039;&#039;) + &#039; verbleibend&#039;;&lt;br /&gt;
    } else if (remaining === 0) { if (conversationId) {&lt;br /&gt;
      statusEl.textContent = &#039;Keine R\u00fcckfragen mehr m\u00f6glich&#039;;&lt;br /&gt;
      input.disabled = true;&lt;br /&gt;
      sendBtn.disabled = true;&lt;br /&gt;
      input.placeholder = &#039;Starte eine neue Unterhaltung&#039;;&lt;br /&gt;
    } }&lt;br /&gt;
    newBtn.className = conversationId ? &#039;visible&#039; : &#039;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function resetConversation() {&lt;br /&gt;
    conversationId = null;&lt;br /&gt;
    messagesEl.innerHTML = &#039;&#039;;&lt;br /&gt;
    sourcesPanel.className = &#039;&#039;;&lt;br /&gt;
    sourcesPanel.innerHTML = &#039;&#039;;&lt;br /&gt;
    statusEl.textContent = &#039;&#039;;&lt;br /&gt;
    newBtn.className = &#039;&#039;;&lt;br /&gt;
    input.disabled = false;&lt;br /&gt;
    sendBtn.disabled = false;&lt;br /&gt;
    input.placeholder = &#039;Stelle eine Frage \u00fcber M\u00fcnster \u2026&#039;;&lt;br /&gt;
    input.focus();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  newBtn.addEventListener(&#039;click&#039;, resetConversation);&lt;br /&gt;
&lt;br /&gt;
  form.addEventListener(&#039;submit&#039;, function(e) {&lt;br /&gt;
    e.preventDefault();&lt;br /&gt;
    if (isLoading) return;&lt;br /&gt;
    var message = input.value.trim();&lt;br /&gt;
    if (!message) return;&lt;br /&gt;
&lt;br /&gt;
    input.value = &#039;&#039;;&lt;br /&gt;
    addUserMessage(message);&lt;br /&gt;
    setLoading(true);&lt;br /&gt;
&lt;br /&gt;
    var body = { message: message };&lt;br /&gt;
    if (conversationId) {&lt;br /&gt;
      body.conversation_id = conversationId;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var url = location.protocol + &#039;//&#039; + apiHost + &#039;/chat&#039;;&lt;br /&gt;
&lt;br /&gt;
    fetch(url, {&lt;br /&gt;
      method: &#039;POST&#039;,&lt;br /&gt;
      headers: { &#039;Content-Type&#039;: &#039;application/json&#039; },&lt;br /&gt;
      body: JSON.stringify(body)&lt;br /&gt;
    })&lt;br /&gt;
      .then(function(res) {&lt;br /&gt;
        if (!res.ok) {&lt;br /&gt;
          return res.json().then(function(data) {&lt;br /&gt;
            throw new Error(data.detail || &#039;HTTP &#039; + res.status);&lt;br /&gt;
          });&lt;br /&gt;
        }&lt;br /&gt;
        return res.json();&lt;br /&gt;
      })&lt;br /&gt;
      .then(function(data) {&lt;br /&gt;
        setLoading(false);&lt;br /&gt;
        conversationId = data.conversation_id;&lt;br /&gt;
        addAssistantMessage(data.answer);&lt;br /&gt;
        renderSources(data.sources);&lt;br /&gt;
        updateStatus(data.remaining_followups);&lt;br /&gt;
        input.focus();&lt;br /&gt;
      })&lt;br /&gt;
      .catch(function(err) {&lt;br /&gt;
        setLoading(false);&lt;br /&gt;
        addError(&#039;Fehler: &#039; + err.message);&lt;br /&gt;
        input.focus();&lt;br /&gt;
      });&lt;br /&gt;
  });&lt;br /&gt;
})();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
.overlay-container {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  background-image:url(&amp;quot;/w/images/a/a9/Schloss-Muenster-Philipp-Foelting-CC-BY-SA.jpg&amp;quot;);&lt;br /&gt;
  background-size: cover;&lt;br /&gt;
  background-position: center;&lt;br /&gt;
  min-height:400px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.overlay-content {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  top: 50%; /* Position des Widgets */&lt;br /&gt;
  left: 50%;&lt;br /&gt;
  transform: translate(-50%, -50%);&lt;br /&gt;
  color: white; /* Textfarbe: Weiß */&lt;br /&gt;
  background-color: #00308D; /* Hintergrundfarbe: Blau */&lt;br /&gt;
  border-radius: 15px; /* Abgerundete Ecken */&lt;br /&gt;
  padding: 20px;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  width: 80%; /* Breite des Widgets, kannst du anpassen */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.overlay-content p {&lt;br /&gt;
  margin: 10px 0; /* Abstand zwischen den Textabsätzen */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.overlay-content .headline-text {&lt;br /&gt;
  font-size: 1.5em; /* Größerer Schriftzug */&lt;br /&gt;
  font-weight: bold; /* Dickere Schrift */&lt;br /&gt;
  margin: 10px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* To make images responsive */&lt;br /&gt;
.img-fluid img {&lt;br /&gt;
	max-width:100%;&lt;br /&gt;
	height:auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Widget:StartseitenSuche&amp;diff=1088</id>
		<title>Widget:StartseitenSuche</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Widget:StartseitenSuche&amp;diff=1088"/>
		<updated>2026-04-28T08:58:54Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;chat-widget&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;chat-messages&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;chat-sources-panel&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;form id=&amp;quot;chat-form&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;chat-input&amp;quot; placeholder=&amp;quot;Stelle eine Frage über Münster …&amp;quot; autocomplete=&amp;quot;off&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;button type=&amp;quot;submit&amp;quot; id=&amp;quot;chat-send&amp;quot;&amp;gt;Fragen&amp;lt;/button&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;chat-footer&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;span id=&amp;quot;chat-status&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;button id=&amp;quot;chat-new&amp;quot; type=&amp;quot;button&amp;quot;&amp;gt;Neue Unterhaltung&amp;lt;/button&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
#chat-widget {&lt;br /&gt;
  max-width: 800px;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  font-family: -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  background-image:url(&amp;quot;/w/images/a/a9/Schloss-Muenster-Philipp-Foelting-CC-BY-SA.jpg&amp;quot;);&lt;br /&gt;
  background-size: cover;&lt;br /&gt;
  background-position: center;&lt;br /&gt;
  min-height:400px;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
}&lt;br /&gt;
#chat-messages {&lt;br /&gt;
  min-height: 120px;&lt;br /&gt;
  max-height: 500px;&lt;br /&gt;
  overflow-y: auto;&lt;br /&gt;
  padding: 8px 0;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
}&lt;br /&gt;
#chat-messages:empty::before {&lt;br /&gt;
  content: &amp;quot;Stelle eine Frage und erhalte Antworten basierend auf dem Münster Wiki und ausgewählten Seiten. Beachte: KI-Suche kann Fehler enthalten. Bitte prüfe die Ergebnisse. Personenbezogenen Daten können zur Optimierung der KI genutzt werden&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  color: #999;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  padding: 40px 16px;&lt;br /&gt;
}&lt;br /&gt;
.chat-msg {&lt;br /&gt;
  max-width: 85%;&lt;br /&gt;
  padding: 10px 14px;&lt;br /&gt;
  border-radius: 10px;&lt;br /&gt;
  font-size: 14.5px;&lt;br /&gt;
  line-height: 1.55;&lt;br /&gt;
  word-wrap: break-word;&lt;br /&gt;
}&lt;br /&gt;
.chat-msg-user {&lt;br /&gt;
  align-self: flex-end;&lt;br /&gt;
  background: #00308D;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  border-bottom-right-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
.chat-msg-assistant {&lt;br /&gt;
  align-self: flex-start;&lt;br /&gt;
  background: #f0f2f5;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  border-bottom-left-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
.chat-msg-assistant p {&lt;br /&gt;
  margin: 0 0 8px 0;&lt;br /&gt;
}&lt;br /&gt;
.chat-msg-assistant p:last-child {&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
@keyframes chatDots {&lt;br /&gt;
  0%, 80%, 100% { opacity: 0.3; }&lt;br /&gt;
  40% { opacity: 1; }&lt;br /&gt;
}&lt;br /&gt;
.chat-loading-dots span {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  width: 7px;&lt;br /&gt;
  height: 7px;&lt;br /&gt;
  margin: 0 2px;&lt;br /&gt;
  background: #999;&lt;br /&gt;
  border-radius: 50%;&lt;br /&gt;
  animation: chatDots 1.2s ease-in-out infinite;&lt;br /&gt;
}&lt;br /&gt;
.chat-loading-dots span:nth-child(2) { animation-delay: 0.15s; }&lt;br /&gt;
.chat-loading-dots span:nth-child(3) { animation-delay: 0.3s; }&lt;br /&gt;
#chat-sources-panel {&lt;br /&gt;
  display: none;&lt;br /&gt;
}&lt;br /&gt;
#chat-sources-panel.visible {&lt;br /&gt;
  display: block;&lt;br /&gt;
  margin: 4px 0 8px 0;&lt;br /&gt;
}&lt;br /&gt;
.chat-sources-toggle {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: 1px solid #ddd;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  padding: 6px 12px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.chat-sources-toggle:hover {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
}&lt;br /&gt;
.chat-sources-list {&lt;br /&gt;
  display: none;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
}&lt;br /&gt;
.chat-sources-list.open {&lt;br /&gt;
  display: block;&lt;br /&gt;
}&lt;br /&gt;
.chat-source-item {&lt;br /&gt;
  padding: 10px 12px;&lt;br /&gt;
  margin-bottom: 6px;&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  transition: border-color 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.chat-source-item:hover {&lt;br /&gt;
  border-color: #b0b8c1;&lt;br /&gt;
}&lt;br /&gt;
.chat-source-item h5 {&lt;br /&gt;
  margin: 0 0 3px 0;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
.chat-source-item h5 a {&lt;br /&gt;
  color: #00308D;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
.chat-source-item h5 a:hover {&lt;br /&gt;
  text-decoration: underline;&lt;br /&gt;
}&lt;br /&gt;
.chat-source-item .chat-source-snippet {&lt;br /&gt;
  font-size: 12.5px;&lt;br /&gt;
  line-height: 1.45;&lt;br /&gt;
  color: #666;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.chat-source-item .chat-source-meta {&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  color: #999;&lt;br /&gt;
  margin-top: 3px;&lt;br /&gt;
}&lt;br /&gt;
#chat-form {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
}&lt;br /&gt;
#chat-input {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  padding: 10px 14px;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  border: 1px solid #ccc;&lt;br /&gt;
  border-right: none;&lt;br /&gt;
  border-radius: 4px 0 0 4px;&lt;br /&gt;
  outline: none;&lt;br /&gt;
  transition: border-color 0.2s;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
}&lt;br /&gt;
#chat-input:focus {&lt;br /&gt;
  border-color: #4CAF50;&lt;br /&gt;
}&lt;br /&gt;
#chat-input:disabled {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
  color: #999;&lt;br /&gt;
}&lt;br /&gt;
#chat-send {&lt;br /&gt;
  padding: 10px 20px;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  background: #4CAF50;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-radius: 0 4px 4px 0;&lt;br /&gt;
  transition: background 0.2s;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
#chat-send:hover {&lt;br /&gt;
  background: #43A047;&lt;br /&gt;
}&lt;br /&gt;
#chat-send:disabled {&lt;br /&gt;
  background: #a5d6a7;&lt;br /&gt;
  cursor: not-allowed;&lt;br /&gt;
}&lt;br /&gt;
#chat-footer {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: space-between;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
  min-height: 28px;&lt;br /&gt;
}&lt;br /&gt;
#chat-status {&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #888;&lt;br /&gt;
}&lt;br /&gt;
#chat-new {&lt;br /&gt;
  display: none;&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: 1px solid #ccc;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  padding: 4px 12px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
#chat-new:hover {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
}&lt;br /&gt;
#chat-new.visible {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
}&lt;br /&gt;
.chat-msg-error {&lt;br /&gt;
  align-self: center;&lt;br /&gt;
  background: #fef2f2;&lt;br /&gt;
  color: #b00;&lt;br /&gt;
  border: 1px solid #fca5a5;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  padding: 8px 14px;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function() {&lt;br /&gt;
  var form = document.getElementById(&#039;chat-form&#039;);&lt;br /&gt;
  var input = document.getElementById(&#039;chat-input&#039;);&lt;br /&gt;
  var sendBtn = document.getElementById(&#039;chat-send&#039;);&lt;br /&gt;
  var messagesEl = document.getElementById(&#039;chat-messages&#039;);&lt;br /&gt;
  var sourcesPanel = document.getElementById(&#039;chat-sources-panel&#039;);&lt;br /&gt;
  var statusEl = document.getElementById(&#039;chat-status&#039;);&lt;br /&gt;
  var newBtn = document.getElementById(&#039;chat-new&#039;);&lt;br /&gt;
  var apiHost = &#039;api.&#039; + location.hostname.split(&#039;.&#039;).slice(1).join(&#039;.&#039;);&lt;br /&gt;
&lt;br /&gt;
  var conversationId = null;&lt;br /&gt;
  var isLoading = false;&lt;br /&gt;
&lt;br /&gt;
  function escapeHtml(str) {&lt;br /&gt;
    var d = document.createElement(&#039;div&#039;);&lt;br /&gt;
    d.textContent = str;&lt;br /&gt;
    return d.innerHTML;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function truncate(str, len) {&lt;br /&gt;
    if (str.length &amp;lt;= len) return str;&lt;br /&gt;
    return str.substring(0, len).replace(/\s+\S*$/, &#039;&#039;) + &#039;\u2026&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function formatAnswer(text) {&lt;br /&gt;
    var html = escapeHtml(text);&lt;br /&gt;
    html = html.replace(/\*\*(.+?)\*\*/g, &#039;&amp;lt;strong&amp;gt;$1&amp;lt;/strong&amp;gt;&#039;);&lt;br /&gt;
    var paragraphs = html.split(/\n{2,}/);&lt;br /&gt;
    if (paragraphs.length &amp;gt; 1) {&lt;br /&gt;
      html = paragraphs.map(function(p) { return &#039;&amp;lt;p&amp;gt;&#039; + p.replace(/\n/g, &#039;&amp;lt;br&amp;gt;&#039;) + &#039;&amp;lt;/p&amp;gt;&#039;; }).join(&#039;&#039;);&lt;br /&gt;
    } else {&lt;br /&gt;
      html = html.replace(/\n/g, &#039;&amp;lt;br&amp;gt;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    return html;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addUserMessage(text) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-user&#039;;&lt;br /&gt;
    div.textContent = text;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addAssistantMessage(text) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-assistant&#039;;&lt;br /&gt;
    div.innerHTML = formatAnswer(text);&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addLoadingIndicator() {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-assistant chat-loading-dots&#039;;&lt;br /&gt;
    div.id = &#039;chat-loading&#039;;&lt;br /&gt;
    div.innerHTML = &#039;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function removeLoadingIndicator() {&lt;br /&gt;
    var el = document.getElementById(&#039;chat-loading&#039;);&lt;br /&gt;
    if (el) el.remove();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addError(msg) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-error&#039;;&lt;br /&gt;
    div.textContent = msg;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function scrollToBottom() {&lt;br /&gt;
    messagesEl.scrollTop = messagesEl.scrollHeight;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function renderSources(sources) {&lt;br /&gt;
    if (!sources || sources.length === 0) {&lt;br /&gt;
      sourcesPanel.className = &#039;&#039;;&lt;br /&gt;
      sourcesPanel.innerHTML = &#039;&#039;;&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    sourcesPanel.className = &#039;visible&#039;;&lt;br /&gt;
    var listId = &#039;src-list-&#039; + Date.now();&lt;br /&gt;
    var html = &#039;&amp;lt;button class=&amp;quot;chat-sources-toggle&amp;quot; onclick=&amp;quot;var l=document.getElementById(\&#039;&#039; + listId + &#039;\&#039;);l.classList.toggle(\&#039;open\&#039;);this.textContent=l.classList.contains(\&#039;open\&#039;)?\&#039;▲ Quellen verbergen\&#039;:\&#039;▼ &#039; + sources.length + &#039; Quellen anzeigen\&#039;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
      + &#039;▼ &#039; + sources.length + &#039; Quellen anzeigen&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
    html += &#039;&amp;lt;div class=&amp;quot;chat-sources-list&amp;quot; id=&amp;quot;&#039; + listId + &#039;&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
    sources.forEach(function(s) {&lt;br /&gt;
      var pct = Math.round((s.similarity_score || 0) * 100);&lt;br /&gt;
      var wikiUrl = &#039;/wiki/&#039; + encodeURIComponent((s.page_title || &#039;&#039;).replace(/ /g, &#039;_&#039;));&lt;br /&gt;
      html += &#039;&amp;lt;div class=&amp;quot;chat-source-item&amp;quot;&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;h5&amp;gt;&amp;lt;a href=&amp;quot;&#039; + wikiUrl + &#039;&amp;quot;&amp;gt;&#039; + escapeHtml(s.page_title || &#039;&#039;) + &#039;&amp;lt;/a&amp;gt;&amp;lt;/h5&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;p class=&amp;quot;chat-source-snippet&amp;quot;&amp;gt;&#039; + escapeHtml(truncate(s.content_text || &#039;&#039;, 150)) + &#039;&amp;lt;/p&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;div class=&amp;quot;chat-source-meta&amp;quot;&amp;gt;Relevanz: &#039; + pct + &#039;% · &#039; + escapeHtml(s.source || &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    });&lt;br /&gt;
    html += &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    sourcesPanel.innerHTML = html;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function setLoading(loading) {&lt;br /&gt;
    isLoading = loading;&lt;br /&gt;
    input.disabled = loading;&lt;br /&gt;
    sendBtn.disabled = loading;&lt;br /&gt;
    if (loading) {&lt;br /&gt;
      addLoadingIndicator();&lt;br /&gt;
    } else {&lt;br /&gt;
      removeLoadingIndicator();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function updateStatus(remaining) {&lt;br /&gt;
    if (remaining &amp;gt; 0) {&lt;br /&gt;
      statusEl.textContent = remaining + &#039; R\u00fcckfrage&#039; + (remaining !== 1 ? &#039;n&#039; : &#039;&#039;) + &#039; verbleibend&#039;;&lt;br /&gt;
    } else if (remaining === 0) { if (conversationId) {&lt;br /&gt;
      statusEl.textContent = &#039;Keine R\u00fcckfragen mehr m\u00f6glich&#039;;&lt;br /&gt;
      input.disabled = true;&lt;br /&gt;
      sendBtn.disabled = true;&lt;br /&gt;
      input.placeholder = &#039;Starte eine neue Unterhaltung&#039;;&lt;br /&gt;
    } }&lt;br /&gt;
    newBtn.className = conversationId ? &#039;visible&#039; : &#039;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function resetConversation() {&lt;br /&gt;
    conversationId = null;&lt;br /&gt;
    messagesEl.innerHTML = &#039;&#039;;&lt;br /&gt;
    sourcesPanel.className = &#039;&#039;;&lt;br /&gt;
    sourcesPanel.innerHTML = &#039;&#039;;&lt;br /&gt;
    statusEl.textContent = &#039;&#039;;&lt;br /&gt;
    newBtn.className = &#039;&#039;;&lt;br /&gt;
    input.disabled = false;&lt;br /&gt;
    sendBtn.disabled = false;&lt;br /&gt;
    input.placeholder = &#039;Stelle eine Frage \u00fcber M\u00fcnster \u2026&#039;;&lt;br /&gt;
    input.focus();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  newBtn.addEventListener(&#039;click&#039;, resetConversation);&lt;br /&gt;
&lt;br /&gt;
  form.addEventListener(&#039;submit&#039;, function(e) {&lt;br /&gt;
    e.preventDefault();&lt;br /&gt;
    if (isLoading) return;&lt;br /&gt;
    var message = input.value.trim();&lt;br /&gt;
    if (!message) return;&lt;br /&gt;
&lt;br /&gt;
    input.value = &#039;&#039;;&lt;br /&gt;
    addUserMessage(message);&lt;br /&gt;
    setLoading(true);&lt;br /&gt;
&lt;br /&gt;
    var body = { message: message };&lt;br /&gt;
    if (conversationId) {&lt;br /&gt;
      body.conversation_id = conversationId;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var url = location.protocol + &#039;//&#039; + apiHost + &#039;/chat&#039;;&lt;br /&gt;
&lt;br /&gt;
    fetch(url, {&lt;br /&gt;
      method: &#039;POST&#039;,&lt;br /&gt;
      headers: { &#039;Content-Type&#039;: &#039;application/json&#039; },&lt;br /&gt;
      body: JSON.stringify(body)&lt;br /&gt;
    })&lt;br /&gt;
      .then(function(res) {&lt;br /&gt;
        if (!res.ok) {&lt;br /&gt;
          return res.json().then(function(data) {&lt;br /&gt;
            throw new Error(data.detail || &#039;HTTP &#039; + res.status);&lt;br /&gt;
          });&lt;br /&gt;
        }&lt;br /&gt;
        return res.json();&lt;br /&gt;
      })&lt;br /&gt;
      .then(function(data) {&lt;br /&gt;
        setLoading(false);&lt;br /&gt;
        conversationId = data.conversation_id;&lt;br /&gt;
        addAssistantMessage(data.answer);&lt;br /&gt;
        renderSources(data.sources);&lt;br /&gt;
        updateStatus(data.remaining_followups);&lt;br /&gt;
        input.focus();&lt;br /&gt;
      })&lt;br /&gt;
      .catch(function(err) {&lt;br /&gt;
        setLoading(false);&lt;br /&gt;
        addError(&#039;Fehler: &#039; + err.message);&lt;br /&gt;
        input.focus();&lt;br /&gt;
      });&lt;br /&gt;
  });&lt;br /&gt;
})();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
.overlay-container {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  background-image:url(&amp;quot;/w/images/a/a9/Schloss-Muenster-Philipp-Foelting-CC-BY-SA.jpg&amp;quot;);&lt;br /&gt;
  background-size: cover;&lt;br /&gt;
  background-position: center;&lt;br /&gt;
  min-height:400px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.overlay-content {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  top: 50%; /* Position des Widgets */&lt;br /&gt;
  left: 50%;&lt;br /&gt;
  transform: translate(-50%, -50%);&lt;br /&gt;
  color: white; /* Textfarbe: Weiß */&lt;br /&gt;
  background-color: #00308D; /* Hintergrundfarbe: Blau */&lt;br /&gt;
  border-radius: 15px; /* Abgerundete Ecken */&lt;br /&gt;
  padding: 20px;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  width: 80%; /* Breite des Widgets, kannst du anpassen */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.overlay-content p {&lt;br /&gt;
  margin: 10px 0; /* Abstand zwischen den Textabsätzen */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.overlay-content .headline-text {&lt;br /&gt;
  font-size: 1.5em; /* Größerer Schriftzug */&lt;br /&gt;
  font-weight: bold; /* Dickere Schrift */&lt;br /&gt;
  margin: 10px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* To make images responsive */&lt;br /&gt;
.img-fluid img {&lt;br /&gt;
	max-width:100%;&lt;br /&gt;
	height:auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Widget:StartseitenSuche&amp;diff=1087</id>
		<title>Widget:StartseitenSuche</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Widget:StartseitenSuche&amp;diff=1087"/>
		<updated>2026-04-28T08:55:12Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;chat-widget&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;chat-messages&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;chat-sources-panel&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;form id=&amp;quot;chat-form&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;chat-input&amp;quot; placeholder=&amp;quot;Stelle eine Frage über Münster …&amp;quot; autocomplete=&amp;quot;off&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;button type=&amp;quot;submit&amp;quot; id=&amp;quot;chat-send&amp;quot;&amp;gt;Fragen&amp;lt;/button&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;chat-footer&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;span id=&amp;quot;chat-status&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;button id=&amp;quot;chat-new&amp;quot; type=&amp;quot;button&amp;quot;&amp;gt;Neue Unterhaltung&amp;lt;/button&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
#chat-widget {&lt;br /&gt;
  max-width: 800px;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  font-family: -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
}&lt;br /&gt;
#chat-messages {&lt;br /&gt;
  min-height: 120px;&lt;br /&gt;
  max-height: 500px;&lt;br /&gt;
  overflow-y: auto;&lt;br /&gt;
  padding: 8px 0;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
}&lt;br /&gt;
#chat-messages:empty::before {&lt;br /&gt;
  content: &amp;quot;Stelle eine Frage und erhalte Antworten basierend auf dem Münster Wiki und ausgewählten Seiten. Beachte: KI-Suche kann Fehler enthalten. Bitte prüfe die Ergebnisse. Personenbezogenen Daten können zur Optimierung der KI genutzt werden&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  color: #999;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  padding: 40px 16px;&lt;br /&gt;
}&lt;br /&gt;
.chat-msg {&lt;br /&gt;
  max-width: 85%;&lt;br /&gt;
  padding: 10px 14px;&lt;br /&gt;
  border-radius: 10px;&lt;br /&gt;
  font-size: 14.5px;&lt;br /&gt;
  line-height: 1.55;&lt;br /&gt;
  word-wrap: break-word;&lt;br /&gt;
}&lt;br /&gt;
.chat-msg-user {&lt;br /&gt;
  align-self: flex-end;&lt;br /&gt;
  background: #00308D;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  border-bottom-right-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
.chat-msg-assistant {&lt;br /&gt;
  align-self: flex-start;&lt;br /&gt;
  background: #f0f2f5;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  border-bottom-left-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
.chat-msg-assistant p {&lt;br /&gt;
  margin: 0 0 8px 0;&lt;br /&gt;
}&lt;br /&gt;
.chat-msg-assistant p:last-child {&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
@keyframes chatDots {&lt;br /&gt;
  0%, 80%, 100% { opacity: 0.3; }&lt;br /&gt;
  40% { opacity: 1; }&lt;br /&gt;
}&lt;br /&gt;
.chat-loading-dots span {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  width: 7px;&lt;br /&gt;
  height: 7px;&lt;br /&gt;
  margin: 0 2px;&lt;br /&gt;
  background: #999;&lt;br /&gt;
  border-radius: 50%;&lt;br /&gt;
  animation: chatDots 1.2s ease-in-out infinite;&lt;br /&gt;
}&lt;br /&gt;
.chat-loading-dots span:nth-child(2) { animation-delay: 0.15s; }&lt;br /&gt;
.chat-loading-dots span:nth-child(3) { animation-delay: 0.3s; }&lt;br /&gt;
#chat-sources-panel {&lt;br /&gt;
  display: none;&lt;br /&gt;
}&lt;br /&gt;
#chat-sources-panel.visible {&lt;br /&gt;
  display: block;&lt;br /&gt;
  margin: 4px 0 8px 0;&lt;br /&gt;
}&lt;br /&gt;
.chat-sources-toggle {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: 1px solid #ddd;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  padding: 6px 12px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.chat-sources-toggle:hover {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
}&lt;br /&gt;
.chat-sources-list {&lt;br /&gt;
  display: none;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
}&lt;br /&gt;
.chat-sources-list.open {&lt;br /&gt;
  display: block;&lt;br /&gt;
}&lt;br /&gt;
.chat-source-item {&lt;br /&gt;
  padding: 10px 12px;&lt;br /&gt;
  margin-bottom: 6px;&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  transition: border-color 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.chat-source-item:hover {&lt;br /&gt;
  border-color: #b0b8c1;&lt;br /&gt;
}&lt;br /&gt;
.chat-source-item h5 {&lt;br /&gt;
  margin: 0 0 3px 0;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
.chat-source-item h5 a {&lt;br /&gt;
  color: #00308D;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
.chat-source-item h5 a:hover {&lt;br /&gt;
  text-decoration: underline;&lt;br /&gt;
}&lt;br /&gt;
.chat-source-item .chat-source-snippet {&lt;br /&gt;
  font-size: 12.5px;&lt;br /&gt;
  line-height: 1.45;&lt;br /&gt;
  color: #666;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.chat-source-item .chat-source-meta {&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  color: #999;&lt;br /&gt;
  margin-top: 3px;&lt;br /&gt;
}&lt;br /&gt;
#chat-form {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
}&lt;br /&gt;
#chat-input {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  padding: 10px 14px;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  border: 1px solid #ccc;&lt;br /&gt;
  border-right: none;&lt;br /&gt;
  border-radius: 4px 0 0 4px;&lt;br /&gt;
  outline: none;&lt;br /&gt;
  transition: border-color 0.2s;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
}&lt;br /&gt;
#chat-input:focus {&lt;br /&gt;
  border-color: #4CAF50;&lt;br /&gt;
}&lt;br /&gt;
#chat-input:disabled {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
  color: #999;&lt;br /&gt;
}&lt;br /&gt;
#chat-send {&lt;br /&gt;
  padding: 10px 20px;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  background: #4CAF50;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-radius: 0 4px 4px 0;&lt;br /&gt;
  transition: background 0.2s;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
#chat-send:hover {&lt;br /&gt;
  background: #43A047;&lt;br /&gt;
}&lt;br /&gt;
#chat-send:disabled {&lt;br /&gt;
  background: #a5d6a7;&lt;br /&gt;
  cursor: not-allowed;&lt;br /&gt;
}&lt;br /&gt;
#chat-footer {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: space-between;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
  min-height: 28px;&lt;br /&gt;
}&lt;br /&gt;
#chat-status {&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #888;&lt;br /&gt;
}&lt;br /&gt;
#chat-new {&lt;br /&gt;
  display: none;&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: 1px solid #ccc;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  padding: 4px 12px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
#chat-new:hover {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
}&lt;br /&gt;
#chat-new.visible {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
}&lt;br /&gt;
.chat-msg-error {&lt;br /&gt;
  align-self: center;&lt;br /&gt;
  background: #fef2f2;&lt;br /&gt;
  color: #b00;&lt;br /&gt;
  border: 1px solid #fca5a5;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  padding: 8px 14px;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function() {&lt;br /&gt;
  var form = document.getElementById(&#039;chat-form&#039;);&lt;br /&gt;
  var input = document.getElementById(&#039;chat-input&#039;);&lt;br /&gt;
  var sendBtn = document.getElementById(&#039;chat-send&#039;);&lt;br /&gt;
  var messagesEl = document.getElementById(&#039;chat-messages&#039;);&lt;br /&gt;
  var sourcesPanel = document.getElementById(&#039;chat-sources-panel&#039;);&lt;br /&gt;
  var statusEl = document.getElementById(&#039;chat-status&#039;);&lt;br /&gt;
  var newBtn = document.getElementById(&#039;chat-new&#039;);&lt;br /&gt;
  var apiHost = &#039;api.&#039; + location.hostname.split(&#039;.&#039;).slice(1).join(&#039;.&#039;);&lt;br /&gt;
&lt;br /&gt;
  var conversationId = null;&lt;br /&gt;
  var isLoading = false;&lt;br /&gt;
&lt;br /&gt;
  function escapeHtml(str) {&lt;br /&gt;
    var d = document.createElement(&#039;div&#039;);&lt;br /&gt;
    d.textContent = str;&lt;br /&gt;
    return d.innerHTML;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function truncate(str, len) {&lt;br /&gt;
    if (str.length &amp;lt;= len) return str;&lt;br /&gt;
    return str.substring(0, len).replace(/\s+\S*$/, &#039;&#039;) + &#039;\u2026&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function formatAnswer(text) {&lt;br /&gt;
    var html = escapeHtml(text);&lt;br /&gt;
    html = html.replace(/\*\*(.+?)\*\*/g, &#039;&amp;lt;strong&amp;gt;$1&amp;lt;/strong&amp;gt;&#039;);&lt;br /&gt;
    var paragraphs = html.split(/\n{2,}/);&lt;br /&gt;
    if (paragraphs.length &amp;gt; 1) {&lt;br /&gt;
      html = paragraphs.map(function(p) { return &#039;&amp;lt;p&amp;gt;&#039; + p.replace(/\n/g, &#039;&amp;lt;br&amp;gt;&#039;) + &#039;&amp;lt;/p&amp;gt;&#039;; }).join(&#039;&#039;);&lt;br /&gt;
    } else {&lt;br /&gt;
      html = html.replace(/\n/g, &#039;&amp;lt;br&amp;gt;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    return html;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addUserMessage(text) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-user&#039;;&lt;br /&gt;
    div.textContent = text;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addAssistantMessage(text) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-assistant&#039;;&lt;br /&gt;
    div.innerHTML = formatAnswer(text);&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addLoadingIndicator() {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-assistant chat-loading-dots&#039;;&lt;br /&gt;
    div.id = &#039;chat-loading&#039;;&lt;br /&gt;
    div.innerHTML = &#039;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function removeLoadingIndicator() {&lt;br /&gt;
    var el = document.getElementById(&#039;chat-loading&#039;);&lt;br /&gt;
    if (el) el.remove();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addError(msg) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-error&#039;;&lt;br /&gt;
    div.textContent = msg;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function scrollToBottom() {&lt;br /&gt;
    messagesEl.scrollTop = messagesEl.scrollHeight;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function renderSources(sources) {&lt;br /&gt;
    if (!sources || sources.length === 0) {&lt;br /&gt;
      sourcesPanel.className = &#039;&#039;;&lt;br /&gt;
      sourcesPanel.innerHTML = &#039;&#039;;&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    sourcesPanel.className = &#039;visible&#039;;&lt;br /&gt;
    var listId = &#039;src-list-&#039; + Date.now();&lt;br /&gt;
    var html = &#039;&amp;lt;button class=&amp;quot;chat-sources-toggle&amp;quot; onclick=&amp;quot;var l=document.getElementById(\&#039;&#039; + listId + &#039;\&#039;);l.classList.toggle(\&#039;open\&#039;);this.textContent=l.classList.contains(\&#039;open\&#039;)?\&#039;▲ Quellen verbergen\&#039;:\&#039;▼ &#039; + sources.length + &#039; Quellen anzeigen\&#039;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
      + &#039;▼ &#039; + sources.length + &#039; Quellen anzeigen&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
    html += &#039;&amp;lt;div class=&amp;quot;chat-sources-list&amp;quot; id=&amp;quot;&#039; + listId + &#039;&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
    sources.forEach(function(s) {&lt;br /&gt;
      var pct = Math.round((s.similarity_score || 0) * 100);&lt;br /&gt;
      var wikiUrl = &#039;/wiki/&#039; + encodeURIComponent((s.page_title || &#039;&#039;).replace(/ /g, &#039;_&#039;));&lt;br /&gt;
      html += &#039;&amp;lt;div class=&amp;quot;chat-source-item&amp;quot;&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;h5&amp;gt;&amp;lt;a href=&amp;quot;&#039; + wikiUrl + &#039;&amp;quot;&amp;gt;&#039; + escapeHtml(s.page_title || &#039;&#039;) + &#039;&amp;lt;/a&amp;gt;&amp;lt;/h5&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;p class=&amp;quot;chat-source-snippet&amp;quot;&amp;gt;&#039; + escapeHtml(truncate(s.content_text || &#039;&#039;, 150)) + &#039;&amp;lt;/p&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;div class=&amp;quot;chat-source-meta&amp;quot;&amp;gt;Relevanz: &#039; + pct + &#039;% · &#039; + escapeHtml(s.source || &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    });&lt;br /&gt;
    html += &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    sourcesPanel.innerHTML = html;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function setLoading(loading) {&lt;br /&gt;
    isLoading = loading;&lt;br /&gt;
    input.disabled = loading;&lt;br /&gt;
    sendBtn.disabled = loading;&lt;br /&gt;
    if (loading) {&lt;br /&gt;
      addLoadingIndicator();&lt;br /&gt;
    } else {&lt;br /&gt;
      removeLoadingIndicator();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function updateStatus(remaining) {&lt;br /&gt;
    if (remaining &amp;gt; 0) {&lt;br /&gt;
      statusEl.textContent = remaining + &#039; R\u00fcckfrage&#039; + (remaining !== 1 ? &#039;n&#039; : &#039;&#039;) + &#039; verbleibend&#039;;&lt;br /&gt;
    } else if (remaining === 0) { if (conversationId) {&lt;br /&gt;
      statusEl.textContent = &#039;Keine R\u00fcckfragen mehr m\u00f6glich&#039;;&lt;br /&gt;
      input.disabled = true;&lt;br /&gt;
      sendBtn.disabled = true;&lt;br /&gt;
      input.placeholder = &#039;Starte eine neue Unterhaltung&#039;;&lt;br /&gt;
    } }&lt;br /&gt;
    newBtn.className = conversationId ? &#039;visible&#039; : &#039;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function resetConversation() {&lt;br /&gt;
    conversationId = null;&lt;br /&gt;
    messagesEl.innerHTML = &#039;&#039;;&lt;br /&gt;
    sourcesPanel.className = &#039;&#039;;&lt;br /&gt;
    sourcesPanel.innerHTML = &#039;&#039;;&lt;br /&gt;
    statusEl.textContent = &#039;&#039;;&lt;br /&gt;
    newBtn.className = &#039;&#039;;&lt;br /&gt;
    input.disabled = false;&lt;br /&gt;
    sendBtn.disabled = false;&lt;br /&gt;
    input.placeholder = &#039;Stelle eine Frage \u00fcber M\u00fcnster \u2026&#039;;&lt;br /&gt;
    input.focus();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  newBtn.addEventListener(&#039;click&#039;, resetConversation);&lt;br /&gt;
&lt;br /&gt;
  form.addEventListener(&#039;submit&#039;, function(e) {&lt;br /&gt;
    e.preventDefault();&lt;br /&gt;
    if (isLoading) return;&lt;br /&gt;
    var message = input.value.trim();&lt;br /&gt;
    if (!message) return;&lt;br /&gt;
&lt;br /&gt;
    input.value = &#039;&#039;;&lt;br /&gt;
    addUserMessage(message);&lt;br /&gt;
    setLoading(true);&lt;br /&gt;
&lt;br /&gt;
    var body = { message: message };&lt;br /&gt;
    if (conversationId) {&lt;br /&gt;
      body.conversation_id = conversationId;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var url = location.protocol + &#039;//&#039; + apiHost + &#039;/chat&#039;;&lt;br /&gt;
&lt;br /&gt;
    fetch(url, {&lt;br /&gt;
      method: &#039;POST&#039;,&lt;br /&gt;
      headers: { &#039;Content-Type&#039;: &#039;application/json&#039; },&lt;br /&gt;
      body: JSON.stringify(body)&lt;br /&gt;
    })&lt;br /&gt;
      .then(function(res) {&lt;br /&gt;
        if (!res.ok) {&lt;br /&gt;
          return res.json().then(function(data) {&lt;br /&gt;
            throw new Error(data.detail || &#039;HTTP &#039; + res.status);&lt;br /&gt;
          });&lt;br /&gt;
        }&lt;br /&gt;
        return res.json();&lt;br /&gt;
      })&lt;br /&gt;
      .then(function(data) {&lt;br /&gt;
        setLoading(false);&lt;br /&gt;
        conversationId = data.conversation_id;&lt;br /&gt;
        addAssistantMessage(data.answer);&lt;br /&gt;
        renderSources(data.sources);&lt;br /&gt;
        updateStatus(data.remaining_followups);&lt;br /&gt;
        input.focus();&lt;br /&gt;
      })&lt;br /&gt;
      .catch(function(err) {&lt;br /&gt;
        setLoading(false);&lt;br /&gt;
        addError(&#039;Fehler: &#039; + err.message);&lt;br /&gt;
        input.focus();&lt;br /&gt;
      });&lt;br /&gt;
  });&lt;br /&gt;
})();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
.overlay-container {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  background-image:url(&amp;quot;/w/images/a/a9/Schloss-Muenster-Philipp-Foelting-CC-BY-SA.jpg&amp;quot;);&lt;br /&gt;
  background-size: cover;&lt;br /&gt;
  background-position: center;&lt;br /&gt;
  min-height:400px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.overlay-content {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  top: 50%; /* Position des Widgets */&lt;br /&gt;
  left: 50%;&lt;br /&gt;
  transform: translate(-50%, -50%);&lt;br /&gt;
  color: white; /* Textfarbe: Weiß */&lt;br /&gt;
  background-color: #00308D; /* Hintergrundfarbe: Blau */&lt;br /&gt;
  border-radius: 15px; /* Abgerundete Ecken */&lt;br /&gt;
  padding: 20px;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  width: 80%; /* Breite des Widgets, kannst du anpassen */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.overlay-content p {&lt;br /&gt;
  margin: 10px 0; /* Abstand zwischen den Textabsätzen */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.overlay-content .headline-text {&lt;br /&gt;
  font-size: 1.5em; /* Größerer Schriftzug */&lt;br /&gt;
  font-weight: bold; /* Dickere Schrift */&lt;br /&gt;
  margin: 10px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* To make images responsive */&lt;br /&gt;
.img-fluid img {&lt;br /&gt;
	max-width:100%;&lt;br /&gt;
	height:auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Widget:StartseitenSuche&amp;diff=1086</id>
		<title>Widget:StartseitenSuche</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Widget:StartseitenSuche&amp;diff=1086"/>
		<updated>2026-04-28T08:54:40Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;chat-widget&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;chat-messages&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;chat-sources-panel&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;form id=&amp;quot;chat-form&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;chat-input&amp;quot; placeholder=&amp;quot;Stelle eine Frage über Münster …&amp;quot; autocomplete=&amp;quot;off&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;button type=&amp;quot;submit&amp;quot; id=&amp;quot;chat-send&amp;quot;&amp;gt;Fragen&amp;lt;/button&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;chat-footer&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;span id=&amp;quot;chat-status&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;button id=&amp;quot;chat-new&amp;quot; type=&amp;quot;button&amp;quot;&amp;gt;Neue Unterhaltung&amp;lt;/button&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
#chat-widget {&lt;br /&gt;
  max-width: 800px;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  font-family: -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
}&lt;br /&gt;
#chat-messages {&lt;br /&gt;
  min-height: 120px;&lt;br /&gt;
  max-height: 500px;&lt;br /&gt;
  overflow-y: auto;&lt;br /&gt;
  padding: 8px 0;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
}&lt;br /&gt;
#chat-messages:empty::before {&lt;br /&gt;
  content: &amp;quot;Stelle eine Frage und erhalte Antworten basierend auf dem Münster Wiki und ausgewählten Seiten. &amp;lt;br&amp;gt; Beachte: KI-Suche kann Fehler enthalten. Bitte prüfe die Ergebnisse. Personenbezogenen Daten können zur Optimierung der KI genutzt werden&amp;quot;&amp;lt;/br&amp;gt;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  color: #999;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  padding: 40px 16px;&lt;br /&gt;
}&lt;br /&gt;
.chat-msg {&lt;br /&gt;
  max-width: 85%;&lt;br /&gt;
  padding: 10px 14px;&lt;br /&gt;
  border-radius: 10px;&lt;br /&gt;
  font-size: 14.5px;&lt;br /&gt;
  line-height: 1.55;&lt;br /&gt;
  word-wrap: break-word;&lt;br /&gt;
}&lt;br /&gt;
.chat-msg-user {&lt;br /&gt;
  align-self: flex-end;&lt;br /&gt;
  background: #00308D;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  border-bottom-right-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
.chat-msg-assistant {&lt;br /&gt;
  align-self: flex-start;&lt;br /&gt;
  background: #f0f2f5;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  border-bottom-left-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
.chat-msg-assistant p {&lt;br /&gt;
  margin: 0 0 8px 0;&lt;br /&gt;
}&lt;br /&gt;
.chat-msg-assistant p:last-child {&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
@keyframes chatDots {&lt;br /&gt;
  0%, 80%, 100% { opacity: 0.3; }&lt;br /&gt;
  40% { opacity: 1; }&lt;br /&gt;
}&lt;br /&gt;
.chat-loading-dots span {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  width: 7px;&lt;br /&gt;
  height: 7px;&lt;br /&gt;
  margin: 0 2px;&lt;br /&gt;
  background: #999;&lt;br /&gt;
  border-radius: 50%;&lt;br /&gt;
  animation: chatDots 1.2s ease-in-out infinite;&lt;br /&gt;
}&lt;br /&gt;
.chat-loading-dots span:nth-child(2) { animation-delay: 0.15s; }&lt;br /&gt;
.chat-loading-dots span:nth-child(3) { animation-delay: 0.3s; }&lt;br /&gt;
#chat-sources-panel {&lt;br /&gt;
  display: none;&lt;br /&gt;
}&lt;br /&gt;
#chat-sources-panel.visible {&lt;br /&gt;
  display: block;&lt;br /&gt;
  margin: 4px 0 8px 0;&lt;br /&gt;
}&lt;br /&gt;
.chat-sources-toggle {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: 1px solid #ddd;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  padding: 6px 12px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.chat-sources-toggle:hover {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
}&lt;br /&gt;
.chat-sources-list {&lt;br /&gt;
  display: none;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
}&lt;br /&gt;
.chat-sources-list.open {&lt;br /&gt;
  display: block;&lt;br /&gt;
}&lt;br /&gt;
.chat-source-item {&lt;br /&gt;
  padding: 10px 12px;&lt;br /&gt;
  margin-bottom: 6px;&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  transition: border-color 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.chat-source-item:hover {&lt;br /&gt;
  border-color: #b0b8c1;&lt;br /&gt;
}&lt;br /&gt;
.chat-source-item h5 {&lt;br /&gt;
  margin: 0 0 3px 0;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
.chat-source-item h5 a {&lt;br /&gt;
  color: #00308D;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
.chat-source-item h5 a:hover {&lt;br /&gt;
  text-decoration: underline;&lt;br /&gt;
}&lt;br /&gt;
.chat-source-item .chat-source-snippet {&lt;br /&gt;
  font-size: 12.5px;&lt;br /&gt;
  line-height: 1.45;&lt;br /&gt;
  color: #666;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.chat-source-item .chat-source-meta {&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  color: #999;&lt;br /&gt;
  margin-top: 3px;&lt;br /&gt;
}&lt;br /&gt;
#chat-form {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
}&lt;br /&gt;
#chat-input {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  padding: 10px 14px;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  border: 1px solid #ccc;&lt;br /&gt;
  border-right: none;&lt;br /&gt;
  border-radius: 4px 0 0 4px;&lt;br /&gt;
  outline: none;&lt;br /&gt;
  transition: border-color 0.2s;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
}&lt;br /&gt;
#chat-input:focus {&lt;br /&gt;
  border-color: #4CAF50;&lt;br /&gt;
}&lt;br /&gt;
#chat-input:disabled {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
  color: #999;&lt;br /&gt;
}&lt;br /&gt;
#chat-send {&lt;br /&gt;
  padding: 10px 20px;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  background: #4CAF50;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-radius: 0 4px 4px 0;&lt;br /&gt;
  transition: background 0.2s;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
#chat-send:hover {&lt;br /&gt;
  background: #43A047;&lt;br /&gt;
}&lt;br /&gt;
#chat-send:disabled {&lt;br /&gt;
  background: #a5d6a7;&lt;br /&gt;
  cursor: not-allowed;&lt;br /&gt;
}&lt;br /&gt;
#chat-footer {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: space-between;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
  min-height: 28px;&lt;br /&gt;
}&lt;br /&gt;
#chat-status {&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #888;&lt;br /&gt;
}&lt;br /&gt;
#chat-new {&lt;br /&gt;
  display: none;&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: 1px solid #ccc;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  padding: 4px 12px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
#chat-new:hover {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
}&lt;br /&gt;
#chat-new.visible {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
}&lt;br /&gt;
.chat-msg-error {&lt;br /&gt;
  align-self: center;&lt;br /&gt;
  background: #fef2f2;&lt;br /&gt;
  color: #b00;&lt;br /&gt;
  border: 1px solid #fca5a5;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  padding: 8px 14px;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function() {&lt;br /&gt;
  var form = document.getElementById(&#039;chat-form&#039;);&lt;br /&gt;
  var input = document.getElementById(&#039;chat-input&#039;);&lt;br /&gt;
  var sendBtn = document.getElementById(&#039;chat-send&#039;);&lt;br /&gt;
  var messagesEl = document.getElementById(&#039;chat-messages&#039;);&lt;br /&gt;
  var sourcesPanel = document.getElementById(&#039;chat-sources-panel&#039;);&lt;br /&gt;
  var statusEl = document.getElementById(&#039;chat-status&#039;);&lt;br /&gt;
  var newBtn = document.getElementById(&#039;chat-new&#039;);&lt;br /&gt;
  var apiHost = &#039;api.&#039; + location.hostname.split(&#039;.&#039;).slice(1).join(&#039;.&#039;);&lt;br /&gt;
&lt;br /&gt;
  var conversationId = null;&lt;br /&gt;
  var isLoading = false;&lt;br /&gt;
&lt;br /&gt;
  function escapeHtml(str) {&lt;br /&gt;
    var d = document.createElement(&#039;div&#039;);&lt;br /&gt;
    d.textContent = str;&lt;br /&gt;
    return d.innerHTML;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function truncate(str, len) {&lt;br /&gt;
    if (str.length &amp;lt;= len) return str;&lt;br /&gt;
    return str.substring(0, len).replace(/\s+\S*$/, &#039;&#039;) + &#039;\u2026&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function formatAnswer(text) {&lt;br /&gt;
    var html = escapeHtml(text);&lt;br /&gt;
    html = html.replace(/\*\*(.+?)\*\*/g, &#039;&amp;lt;strong&amp;gt;$1&amp;lt;/strong&amp;gt;&#039;);&lt;br /&gt;
    var paragraphs = html.split(/\n{2,}/);&lt;br /&gt;
    if (paragraphs.length &amp;gt; 1) {&lt;br /&gt;
      html = paragraphs.map(function(p) { return &#039;&amp;lt;p&amp;gt;&#039; + p.replace(/\n/g, &#039;&amp;lt;br&amp;gt;&#039;) + &#039;&amp;lt;/p&amp;gt;&#039;; }).join(&#039;&#039;);&lt;br /&gt;
    } else {&lt;br /&gt;
      html = html.replace(/\n/g, &#039;&amp;lt;br&amp;gt;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    return html;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addUserMessage(text) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-user&#039;;&lt;br /&gt;
    div.textContent = text;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addAssistantMessage(text) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-assistant&#039;;&lt;br /&gt;
    div.innerHTML = formatAnswer(text);&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addLoadingIndicator() {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-assistant chat-loading-dots&#039;;&lt;br /&gt;
    div.id = &#039;chat-loading&#039;;&lt;br /&gt;
    div.innerHTML = &#039;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function removeLoadingIndicator() {&lt;br /&gt;
    var el = document.getElementById(&#039;chat-loading&#039;);&lt;br /&gt;
    if (el) el.remove();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addError(msg) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-error&#039;;&lt;br /&gt;
    div.textContent = msg;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function scrollToBottom() {&lt;br /&gt;
    messagesEl.scrollTop = messagesEl.scrollHeight;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function renderSources(sources) {&lt;br /&gt;
    if (!sources || sources.length === 0) {&lt;br /&gt;
      sourcesPanel.className = &#039;&#039;;&lt;br /&gt;
      sourcesPanel.innerHTML = &#039;&#039;;&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    sourcesPanel.className = &#039;visible&#039;;&lt;br /&gt;
    var listId = &#039;src-list-&#039; + Date.now();&lt;br /&gt;
    var html = &#039;&amp;lt;button class=&amp;quot;chat-sources-toggle&amp;quot; onclick=&amp;quot;var l=document.getElementById(\&#039;&#039; + listId + &#039;\&#039;);l.classList.toggle(\&#039;open\&#039;);this.textContent=l.classList.contains(\&#039;open\&#039;)?\&#039;▲ Quellen verbergen\&#039;:\&#039;▼ &#039; + sources.length + &#039; Quellen anzeigen\&#039;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
      + &#039;▼ &#039; + sources.length + &#039; Quellen anzeigen&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
    html += &#039;&amp;lt;div class=&amp;quot;chat-sources-list&amp;quot; id=&amp;quot;&#039; + listId + &#039;&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
    sources.forEach(function(s) {&lt;br /&gt;
      var pct = Math.round((s.similarity_score || 0) * 100);&lt;br /&gt;
      var wikiUrl = &#039;/wiki/&#039; + encodeURIComponent((s.page_title || &#039;&#039;).replace(/ /g, &#039;_&#039;));&lt;br /&gt;
      html += &#039;&amp;lt;div class=&amp;quot;chat-source-item&amp;quot;&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;h5&amp;gt;&amp;lt;a href=&amp;quot;&#039; + wikiUrl + &#039;&amp;quot;&amp;gt;&#039; + escapeHtml(s.page_title || &#039;&#039;) + &#039;&amp;lt;/a&amp;gt;&amp;lt;/h5&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;p class=&amp;quot;chat-source-snippet&amp;quot;&amp;gt;&#039; + escapeHtml(truncate(s.content_text || &#039;&#039;, 150)) + &#039;&amp;lt;/p&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;div class=&amp;quot;chat-source-meta&amp;quot;&amp;gt;Relevanz: &#039; + pct + &#039;% · &#039; + escapeHtml(s.source || &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    });&lt;br /&gt;
    html += &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    sourcesPanel.innerHTML = html;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function setLoading(loading) {&lt;br /&gt;
    isLoading = loading;&lt;br /&gt;
    input.disabled = loading;&lt;br /&gt;
    sendBtn.disabled = loading;&lt;br /&gt;
    if (loading) {&lt;br /&gt;
      addLoadingIndicator();&lt;br /&gt;
    } else {&lt;br /&gt;
      removeLoadingIndicator();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function updateStatus(remaining) {&lt;br /&gt;
    if (remaining &amp;gt; 0) {&lt;br /&gt;
      statusEl.textContent = remaining + &#039; R\u00fcckfrage&#039; + (remaining !== 1 ? &#039;n&#039; : &#039;&#039;) + &#039; verbleibend&#039;;&lt;br /&gt;
    } else if (remaining === 0) { if (conversationId) {&lt;br /&gt;
      statusEl.textContent = &#039;Keine R\u00fcckfragen mehr m\u00f6glich&#039;;&lt;br /&gt;
      input.disabled = true;&lt;br /&gt;
      sendBtn.disabled = true;&lt;br /&gt;
      input.placeholder = &#039;Starte eine neue Unterhaltung&#039;;&lt;br /&gt;
    } }&lt;br /&gt;
    newBtn.className = conversationId ? &#039;visible&#039; : &#039;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function resetConversation() {&lt;br /&gt;
    conversationId = null;&lt;br /&gt;
    messagesEl.innerHTML = &#039;&#039;;&lt;br /&gt;
    sourcesPanel.className = &#039;&#039;;&lt;br /&gt;
    sourcesPanel.innerHTML = &#039;&#039;;&lt;br /&gt;
    statusEl.textContent = &#039;&#039;;&lt;br /&gt;
    newBtn.className = &#039;&#039;;&lt;br /&gt;
    input.disabled = false;&lt;br /&gt;
    sendBtn.disabled = false;&lt;br /&gt;
    input.placeholder = &#039;Stelle eine Frage \u00fcber M\u00fcnster \u2026&#039;;&lt;br /&gt;
    input.focus();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  newBtn.addEventListener(&#039;click&#039;, resetConversation);&lt;br /&gt;
&lt;br /&gt;
  form.addEventListener(&#039;submit&#039;, function(e) {&lt;br /&gt;
    e.preventDefault();&lt;br /&gt;
    if (isLoading) return;&lt;br /&gt;
    var message = input.value.trim();&lt;br /&gt;
    if (!message) return;&lt;br /&gt;
&lt;br /&gt;
    input.value = &#039;&#039;;&lt;br /&gt;
    addUserMessage(message);&lt;br /&gt;
    setLoading(true);&lt;br /&gt;
&lt;br /&gt;
    var body = { message: message };&lt;br /&gt;
    if (conversationId) {&lt;br /&gt;
      body.conversation_id = conversationId;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var url = location.protocol + &#039;//&#039; + apiHost + &#039;/chat&#039;;&lt;br /&gt;
&lt;br /&gt;
    fetch(url, {&lt;br /&gt;
      method: &#039;POST&#039;,&lt;br /&gt;
      headers: { &#039;Content-Type&#039;: &#039;application/json&#039; },&lt;br /&gt;
      body: JSON.stringify(body)&lt;br /&gt;
    })&lt;br /&gt;
      .then(function(res) {&lt;br /&gt;
        if (!res.ok) {&lt;br /&gt;
          return res.json().then(function(data) {&lt;br /&gt;
            throw new Error(data.detail || &#039;HTTP &#039; + res.status);&lt;br /&gt;
          });&lt;br /&gt;
        }&lt;br /&gt;
        return res.json();&lt;br /&gt;
      })&lt;br /&gt;
      .then(function(data) {&lt;br /&gt;
        setLoading(false);&lt;br /&gt;
        conversationId = data.conversation_id;&lt;br /&gt;
        addAssistantMessage(data.answer);&lt;br /&gt;
        renderSources(data.sources);&lt;br /&gt;
        updateStatus(data.remaining_followups);&lt;br /&gt;
        input.focus();&lt;br /&gt;
      })&lt;br /&gt;
      .catch(function(err) {&lt;br /&gt;
        setLoading(false);&lt;br /&gt;
        addError(&#039;Fehler: &#039; + err.message);&lt;br /&gt;
        input.focus();&lt;br /&gt;
      });&lt;br /&gt;
  });&lt;br /&gt;
})();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
.overlay-container {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  background-image:url(&amp;quot;/w/images/a/a9/Schloss-Muenster-Philipp-Foelting-CC-BY-SA.jpg&amp;quot;);&lt;br /&gt;
  background-size: cover;&lt;br /&gt;
  background-position: center;&lt;br /&gt;
  min-height:400px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.overlay-content {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  top: 50%; /* Position des Widgets */&lt;br /&gt;
  left: 50%;&lt;br /&gt;
  transform: translate(-50%, -50%);&lt;br /&gt;
  color: white; /* Textfarbe: Weiß */&lt;br /&gt;
  background-color: #00308D; /* Hintergrundfarbe: Blau */&lt;br /&gt;
  border-radius: 15px; /* Abgerundete Ecken */&lt;br /&gt;
  padding: 20px;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  width: 80%; /* Breite des Widgets, kannst du anpassen */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.overlay-content p {&lt;br /&gt;
  margin: 10px 0; /* Abstand zwischen den Textabsätzen */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.overlay-content .headline-text {&lt;br /&gt;
  font-size: 1.5em; /* Größerer Schriftzug */&lt;br /&gt;
  font-weight: bold; /* Dickere Schrift */&lt;br /&gt;
  margin: 10px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* To make images responsive */&lt;br /&gt;
.img-fluid img {&lt;br /&gt;
	max-width:100%;&lt;br /&gt;
	height:auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Ankommen&amp;diff=1085</id>
		<title>Ankommen</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Ankommen&amp;diff=1085"/>
		<updated>2026-04-28T08:53:26Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#widget:StartseitenSuche}}&lt;br /&gt;
&lt;br /&gt;
{{#widget:Teaser}}&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Ankommen&amp;diff=1084</id>
		<title>Ankommen</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Ankommen&amp;diff=1084"/>
		<updated>2026-04-28T08:53:03Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#widget:ChatBox}}&lt;br /&gt;
&lt;br /&gt;
{{#widget:Teaser}}&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Widget:StartseitenSuche&amp;diff=1083</id>
		<title>Widget:StartseitenSuche</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Widget:StartseitenSuche&amp;diff=1083"/>
		<updated>2026-04-28T08:52:40Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;chat-widget&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;chat-messages&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;chat-sources-panel&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;form id=&amp;quot;chat-form&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;chat-input&amp;quot; placeholder=&amp;quot;Stelle eine Frage über Münster …&amp;quot; autocomplete=&amp;quot;off&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;button type=&amp;quot;submit&amp;quot; id=&amp;quot;chat-send&amp;quot;&amp;gt;Fragen&amp;lt;/button&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;chat-footer&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;span id=&amp;quot;chat-status&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;button id=&amp;quot;chat-new&amp;quot; type=&amp;quot;button&amp;quot;&amp;gt;Neue Unterhaltung&amp;lt;/button&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
#chat-widget {&lt;br /&gt;
  max-width: 800px;&lt;br /&gt;
  margin: 0 auto;&lt;br /&gt;
  font-family: -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
}&lt;br /&gt;
#chat-messages {&lt;br /&gt;
  min-height: 120px;&lt;br /&gt;
  max-height: 500px;&lt;br /&gt;
  overflow-y: auto;&lt;br /&gt;
  padding: 8px 0;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  gap: 12px;&lt;br /&gt;
}&lt;br /&gt;
#chat-messages:empty::before {&lt;br /&gt;
  content: &amp;quot;Stelle eine Frage und erhalte Antworten basierend auf dem Münster Wiki und ausgewählten Seiten. Beachte: KI-Suche kann Fehler enthalten. Bitte prüfe die Ergebnisse. Personenbezogenen Daten können zur Optimierung der KI genutzt werden&amp;quot;;&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  color: #999;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  padding: 40px 16px;&lt;br /&gt;
}&lt;br /&gt;
.chat-msg {&lt;br /&gt;
  max-width: 85%;&lt;br /&gt;
  padding: 10px 14px;&lt;br /&gt;
  border-radius: 10px;&lt;br /&gt;
  font-size: 14.5px;&lt;br /&gt;
  line-height: 1.55;&lt;br /&gt;
  word-wrap: break-word;&lt;br /&gt;
}&lt;br /&gt;
.chat-msg-user {&lt;br /&gt;
  align-self: flex-end;&lt;br /&gt;
  background: #00308D;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  border-bottom-right-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
.chat-msg-assistant {&lt;br /&gt;
  align-self: flex-start;&lt;br /&gt;
  background: #f0f2f5;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  border-bottom-left-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
.chat-msg-assistant p {&lt;br /&gt;
  margin: 0 0 8px 0;&lt;br /&gt;
}&lt;br /&gt;
.chat-msg-assistant p:last-child {&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
@keyframes chatDots {&lt;br /&gt;
  0%, 80%, 100% { opacity: 0.3; }&lt;br /&gt;
  40% { opacity: 1; }&lt;br /&gt;
}&lt;br /&gt;
.chat-loading-dots span {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  width: 7px;&lt;br /&gt;
  height: 7px;&lt;br /&gt;
  margin: 0 2px;&lt;br /&gt;
  background: #999;&lt;br /&gt;
  border-radius: 50%;&lt;br /&gt;
  animation: chatDots 1.2s ease-in-out infinite;&lt;br /&gt;
}&lt;br /&gt;
.chat-loading-dots span:nth-child(2) { animation-delay: 0.15s; }&lt;br /&gt;
.chat-loading-dots span:nth-child(3) { animation-delay: 0.3s; }&lt;br /&gt;
#chat-sources-panel {&lt;br /&gt;
  display: none;&lt;br /&gt;
}&lt;br /&gt;
#chat-sources-panel.visible {&lt;br /&gt;
  display: block;&lt;br /&gt;
  margin: 4px 0 8px 0;&lt;br /&gt;
}&lt;br /&gt;
.chat-sources-toggle {&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: 1px solid #ddd;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  padding: 6px 12px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.chat-sources-toggle:hover {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
}&lt;br /&gt;
.chat-sources-list {&lt;br /&gt;
  display: none;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
}&lt;br /&gt;
.chat-sources-list.open {&lt;br /&gt;
  display: block;&lt;br /&gt;
}&lt;br /&gt;
.chat-source-item {&lt;br /&gt;
  padding: 10px 12px;&lt;br /&gt;
  margin-bottom: 6px;&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  transition: border-color 0.15s;&lt;br /&gt;
}&lt;br /&gt;
.chat-source-item:hover {&lt;br /&gt;
  border-color: #b0b8c1;&lt;br /&gt;
}&lt;br /&gt;
.chat-source-item h5 {&lt;br /&gt;
  margin: 0 0 3px 0;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
.chat-source-item h5 a {&lt;br /&gt;
  color: #00308D;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
.chat-source-item h5 a:hover {&lt;br /&gt;
  text-decoration: underline;&lt;br /&gt;
}&lt;br /&gt;
.chat-source-item .chat-source-snippet {&lt;br /&gt;
  font-size: 12.5px;&lt;br /&gt;
  line-height: 1.45;&lt;br /&gt;
  color: #666;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.chat-source-item .chat-source-meta {&lt;br /&gt;
  font-size: 11px;&lt;br /&gt;
  color: #999;&lt;br /&gt;
  margin-top: 3px;&lt;br /&gt;
}&lt;br /&gt;
#chat-form {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
}&lt;br /&gt;
#chat-input {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  padding: 10px 14px;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  border: 1px solid #ccc;&lt;br /&gt;
  border-right: none;&lt;br /&gt;
  border-radius: 4px 0 0 4px;&lt;br /&gt;
  outline: none;&lt;br /&gt;
  transition: border-color 0.2s;&lt;br /&gt;
  color: #212529;&lt;br /&gt;
  background: #fff;&lt;br /&gt;
}&lt;br /&gt;
#chat-input:focus {&lt;br /&gt;
  border-color: #4CAF50;&lt;br /&gt;
}&lt;br /&gt;
#chat-input:disabled {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
  color: #999;&lt;br /&gt;
}&lt;br /&gt;
#chat-send {&lt;br /&gt;
  padding: 10px 20px;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  background: #4CAF50;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  border: none;&lt;br /&gt;
  border-radius: 0 4px 4px 0;&lt;br /&gt;
  transition: background 0.2s;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
#chat-send:hover {&lt;br /&gt;
  background: #43A047;&lt;br /&gt;
}&lt;br /&gt;
#chat-send:disabled {&lt;br /&gt;
  background: #a5d6a7;&lt;br /&gt;
  cursor: not-allowed;&lt;br /&gt;
}&lt;br /&gt;
#chat-footer {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  justify-content: space-between;&lt;br /&gt;
  margin-top: 8px;&lt;br /&gt;
  min-height: 28px;&lt;br /&gt;
}&lt;br /&gt;
#chat-status {&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #888;&lt;br /&gt;
}&lt;br /&gt;
#chat-new {&lt;br /&gt;
  display: none;&lt;br /&gt;
  background: none;&lt;br /&gt;
  border: 1px solid #ccc;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  padding: 4px 12px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  transition: background 0.15s;&lt;br /&gt;
}&lt;br /&gt;
#chat-new:hover {&lt;br /&gt;
  background: #f5f5f5;&lt;br /&gt;
}&lt;br /&gt;
#chat-new.visible {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
}&lt;br /&gt;
.chat-msg-error {&lt;br /&gt;
  align-self: center;&lt;br /&gt;
  background: #fef2f2;&lt;br /&gt;
  color: #b00;&lt;br /&gt;
  border: 1px solid #fca5a5;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  padding: 8px 14px;&lt;br /&gt;
  border-radius: 6px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
(function() {&lt;br /&gt;
  var form = document.getElementById(&#039;chat-form&#039;);&lt;br /&gt;
  var input = document.getElementById(&#039;chat-input&#039;);&lt;br /&gt;
  var sendBtn = document.getElementById(&#039;chat-send&#039;);&lt;br /&gt;
  var messagesEl = document.getElementById(&#039;chat-messages&#039;);&lt;br /&gt;
  var sourcesPanel = document.getElementById(&#039;chat-sources-panel&#039;);&lt;br /&gt;
  var statusEl = document.getElementById(&#039;chat-status&#039;);&lt;br /&gt;
  var newBtn = document.getElementById(&#039;chat-new&#039;);&lt;br /&gt;
  var apiHost = &#039;api.&#039; + location.hostname.split(&#039;.&#039;).slice(1).join(&#039;.&#039;);&lt;br /&gt;
&lt;br /&gt;
  var conversationId = null;&lt;br /&gt;
  var isLoading = false;&lt;br /&gt;
&lt;br /&gt;
  function escapeHtml(str) {&lt;br /&gt;
    var d = document.createElement(&#039;div&#039;);&lt;br /&gt;
    d.textContent = str;&lt;br /&gt;
    return d.innerHTML;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function truncate(str, len) {&lt;br /&gt;
    if (str.length &amp;lt;= len) return str;&lt;br /&gt;
    return str.substring(0, len).replace(/\s+\S*$/, &#039;&#039;) + &#039;\u2026&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function formatAnswer(text) {&lt;br /&gt;
    var html = escapeHtml(text);&lt;br /&gt;
    html = html.replace(/\*\*(.+?)\*\*/g, &#039;&amp;lt;strong&amp;gt;$1&amp;lt;/strong&amp;gt;&#039;);&lt;br /&gt;
    var paragraphs = html.split(/\n{2,}/);&lt;br /&gt;
    if (paragraphs.length &amp;gt; 1) {&lt;br /&gt;
      html = paragraphs.map(function(p) { return &#039;&amp;lt;p&amp;gt;&#039; + p.replace(/\n/g, &#039;&amp;lt;br&amp;gt;&#039;) + &#039;&amp;lt;/p&amp;gt;&#039;; }).join(&#039;&#039;);&lt;br /&gt;
    } else {&lt;br /&gt;
      html = html.replace(/\n/g, &#039;&amp;lt;br&amp;gt;&#039;);&lt;br /&gt;
    }&lt;br /&gt;
    return html;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addUserMessage(text) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-user&#039;;&lt;br /&gt;
    div.textContent = text;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addAssistantMessage(text) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-assistant&#039;;&lt;br /&gt;
    div.innerHTML = formatAnswer(text);&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addLoadingIndicator() {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-assistant chat-loading-dots&#039;;&lt;br /&gt;
    div.id = &#039;chat-loading&#039;;&lt;br /&gt;
    div.innerHTML = &#039;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&#039;;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function removeLoadingIndicator() {&lt;br /&gt;
    var el = document.getElementById(&#039;chat-loading&#039;);&lt;br /&gt;
    if (el) el.remove();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function addError(msg) {&lt;br /&gt;
    var div = document.createElement(&#039;div&#039;);&lt;br /&gt;
    div.className = &#039;chat-msg chat-msg-error&#039;;&lt;br /&gt;
    div.textContent = msg;&lt;br /&gt;
    messagesEl.appendChild(div);&lt;br /&gt;
    scrollToBottom();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function scrollToBottom() {&lt;br /&gt;
    messagesEl.scrollTop = messagesEl.scrollHeight;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function renderSources(sources) {&lt;br /&gt;
    if (!sources || sources.length === 0) {&lt;br /&gt;
      sourcesPanel.className = &#039;&#039;;&lt;br /&gt;
      sourcesPanel.innerHTML = &#039;&#039;;&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    sourcesPanel.className = &#039;visible&#039;;&lt;br /&gt;
    var listId = &#039;src-list-&#039; + Date.now();&lt;br /&gt;
    var html = &#039;&amp;lt;button class=&amp;quot;chat-sources-toggle&amp;quot; onclick=&amp;quot;var l=document.getElementById(\&#039;&#039; + listId + &#039;\&#039;);l.classList.toggle(\&#039;open\&#039;);this.textContent=l.classList.contains(\&#039;open\&#039;)?\&#039;▲ Quellen verbergen\&#039;:\&#039;▼ &#039; + sources.length + &#039; Quellen anzeigen\&#039;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
      + &#039;▼ &#039; + sources.length + &#039; Quellen anzeigen&amp;lt;/button&amp;gt;&#039;;&lt;br /&gt;
    html += &#039;&amp;lt;div class=&amp;quot;chat-sources-list&amp;quot; id=&amp;quot;&#039; + listId + &#039;&amp;quot;&amp;gt;&#039;;&lt;br /&gt;
    sources.forEach(function(s) {&lt;br /&gt;
      var pct = Math.round((s.similarity_score || 0) * 100);&lt;br /&gt;
      var wikiUrl = &#039;/wiki/&#039; + encodeURIComponent((s.page_title || &#039;&#039;).replace(/ /g, &#039;_&#039;));&lt;br /&gt;
      html += &#039;&amp;lt;div class=&amp;quot;chat-source-item&amp;quot;&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;h5&amp;gt;&amp;lt;a href=&amp;quot;&#039; + wikiUrl + &#039;&amp;quot;&amp;gt;&#039; + escapeHtml(s.page_title || &#039;&#039;) + &#039;&amp;lt;/a&amp;gt;&amp;lt;/h5&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;p class=&amp;quot;chat-source-snippet&amp;quot;&amp;gt;&#039; + escapeHtml(truncate(s.content_text || &#039;&#039;, 150)) + &#039;&amp;lt;/p&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;div class=&amp;quot;chat-source-meta&amp;quot;&amp;gt;Relevanz: &#039; + pct + &#039;% · &#039; + escapeHtml(s.source || &#039;&#039;) + &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
        + &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    });&lt;br /&gt;
    html += &#039;&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
    sourcesPanel.innerHTML = html;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function setLoading(loading) {&lt;br /&gt;
    isLoading = loading;&lt;br /&gt;
    input.disabled = loading;&lt;br /&gt;
    sendBtn.disabled = loading;&lt;br /&gt;
    if (loading) {&lt;br /&gt;
      addLoadingIndicator();&lt;br /&gt;
    } else {&lt;br /&gt;
      removeLoadingIndicator();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function updateStatus(remaining) {&lt;br /&gt;
    if (remaining &amp;gt; 0) {&lt;br /&gt;
      statusEl.textContent = remaining + &#039; R\u00fcckfrage&#039; + (remaining !== 1 ? &#039;n&#039; : &#039;&#039;) + &#039; verbleibend&#039;;&lt;br /&gt;
    } else if (remaining === 0) { if (conversationId) {&lt;br /&gt;
      statusEl.textContent = &#039;Keine R\u00fcckfragen mehr m\u00f6glich&#039;;&lt;br /&gt;
      input.disabled = true;&lt;br /&gt;
      sendBtn.disabled = true;&lt;br /&gt;
      input.placeholder = &#039;Starte eine neue Unterhaltung&#039;;&lt;br /&gt;
    } }&lt;br /&gt;
    newBtn.className = conversationId ? &#039;visible&#039; : &#039;&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function resetConversation() {&lt;br /&gt;
    conversationId = null;&lt;br /&gt;
    messagesEl.innerHTML = &#039;&#039;;&lt;br /&gt;
    sourcesPanel.className = &#039;&#039;;&lt;br /&gt;
    sourcesPanel.innerHTML = &#039;&#039;;&lt;br /&gt;
    statusEl.textContent = &#039;&#039;;&lt;br /&gt;
    newBtn.className = &#039;&#039;;&lt;br /&gt;
    input.disabled = false;&lt;br /&gt;
    sendBtn.disabled = false;&lt;br /&gt;
    input.placeholder = &#039;Stelle eine Frage \u00fcber M\u00fcnster \u2026&#039;;&lt;br /&gt;
    input.focus();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  newBtn.addEventListener(&#039;click&#039;, resetConversation);&lt;br /&gt;
&lt;br /&gt;
  form.addEventListener(&#039;submit&#039;, function(e) {&lt;br /&gt;
    e.preventDefault();&lt;br /&gt;
    if (isLoading) return;&lt;br /&gt;
    var message = input.value.trim();&lt;br /&gt;
    if (!message) return;&lt;br /&gt;
&lt;br /&gt;
    input.value = &#039;&#039;;&lt;br /&gt;
    addUserMessage(message);&lt;br /&gt;
    setLoading(true);&lt;br /&gt;
&lt;br /&gt;
    var body = { message: message };&lt;br /&gt;
    if (conversationId) {&lt;br /&gt;
      body.conversation_id = conversationId;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var url = location.protocol + &#039;//&#039; + apiHost + &#039;/chat&#039;;&lt;br /&gt;
&lt;br /&gt;
    fetch(url, {&lt;br /&gt;
      method: &#039;POST&#039;,&lt;br /&gt;
      headers: { &#039;Content-Type&#039;: &#039;application/json&#039; },&lt;br /&gt;
      body: JSON.stringify(body)&lt;br /&gt;
    })&lt;br /&gt;
      .then(function(res) {&lt;br /&gt;
        if (!res.ok) {&lt;br /&gt;
          return res.json().then(function(data) {&lt;br /&gt;
            throw new Error(data.detail || &#039;HTTP &#039; + res.status);&lt;br /&gt;
          });&lt;br /&gt;
        }&lt;br /&gt;
        return res.json();&lt;br /&gt;
      })&lt;br /&gt;
      .then(function(data) {&lt;br /&gt;
        setLoading(false);&lt;br /&gt;
        conversationId = data.conversation_id;&lt;br /&gt;
        addAssistantMessage(data.answer);&lt;br /&gt;
        renderSources(data.sources);&lt;br /&gt;
        updateStatus(data.remaining_followups);&lt;br /&gt;
        input.focus();&lt;br /&gt;
      })&lt;br /&gt;
      .catch(function(err) {&lt;br /&gt;
        setLoading(false);&lt;br /&gt;
        addError(&#039;Fehler: &#039; + err.message);&lt;br /&gt;
        input.focus();&lt;br /&gt;
      });&lt;br /&gt;
  });&lt;br /&gt;
})();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
.overlay-container {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  background-image:url(&amp;quot;/w/images/a/a9/Schloss-Muenster-Philipp-Foelting-CC-BY-SA.jpg&amp;quot;);&lt;br /&gt;
  background-size: cover;&lt;br /&gt;
  background-position: center;&lt;br /&gt;
  min-height:400px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.overlay-content {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  top: 50%; /* Position des Widgets */&lt;br /&gt;
  left: 50%;&lt;br /&gt;
  transform: translate(-50%, -50%);&lt;br /&gt;
  color: white; /* Textfarbe: Weiß */&lt;br /&gt;
  background-color: #00308D; /* Hintergrundfarbe: Blau */&lt;br /&gt;
  border-radius: 15px; /* Abgerundete Ecken */&lt;br /&gt;
  padding: 20px;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  width: 80%; /* Breite des Widgets, kannst du anpassen */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.overlay-content p {&lt;br /&gt;
  margin: 10px 0; /* Abstand zwischen den Textabsätzen */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.overlay-content .headline-text {&lt;br /&gt;
  font-size: 1.5em; /* Größerer Schriftzug */&lt;br /&gt;
  font-weight: bold; /* Dickere Schrift */&lt;br /&gt;
  margin: 10px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* To make images responsive */&lt;br /&gt;
.img-fluid img {&lt;br /&gt;
	max-width:100%;&lt;br /&gt;
	height:auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Widget:Ankommen-Gesundheit&amp;diff=1081</id>
		<title>Widget:Ankommen-Gesundheit</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Widget:Ankommen-Gesundheit&amp;diff=1081"/>
		<updated>2026-04-23T13:46:14Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
  .tiles-container {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: space-between;&lt;br /&gt;
    gap: 20px;&lt;br /&gt;
    flex-wrap: wrap;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .tile {&lt;br /&gt;
    width: 30%;&lt;br /&gt;
    background-color: #b0f7ab;&lt;br /&gt;
    border-radius: 10px;&lt;br /&gt;
    padding: 15px;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);&lt;br /&gt;
    transition: transform 0.3s ease;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .tile:hover {&lt;br /&gt;
    transform: translateY(-5px);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .tile a {&lt;br /&gt;
    text-decoration: none;&lt;br /&gt;
    color: inherit;&lt;br /&gt;
    display: block;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .tile img {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    border-radius: 10px;&lt;br /&gt;
    margin-bottom: 10px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .tile h3 {&lt;br /&gt;
    font-size: 1.2em;&lt;br /&gt;
    margin-bottom: 10px;&lt;br /&gt;
    color: #333;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .tile p {&lt;br /&gt;
    font-size: 0.9em;&lt;br /&gt;
    color: #666;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* Media Query für mobile Geräte */&lt;br /&gt;
  @media (max-width: 768px) {&lt;br /&gt;
    .tile {&lt;br /&gt;
      width: 100%; /* Kacheln werden untereinander angezeigt */&lt;br /&gt;
      margin-bottom: 20px; /* Abstand zwischen den Kacheln */&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;h2&amp;gt;Versorgung &amp;amp; Ärzte&amp;lt;/h2&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;Hier findest du Informationen zu Ärzten und Gesundheitsversorgung in Münster.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;tiles-container&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;tile&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;a href=&amp;quot;https://www.kvwl.de/arztsuche&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;img src=&amp;quot;/w/images/0/00/Arztsuche.jpg&amp;quot; alt=&amp;quot;Bild 1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;h3&amp;gt;Arzt- und Psychotherapeutensuche&amp;lt;/h3&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Weiterleitung zur Seite der KVWL&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/a&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;div class=&amp;quot;tile&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;a href=&amp;quot;https://www.haus-der-familie-muenster.de&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;img src=&amp;quot;/w/images/3/39/Guterstart.jpg&amp;quot; alt=&amp;quot;Bild 2&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;h3&amp;gt;Haus der Familie&amp;lt;/h3&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Weiterleitung zur Seite Haus der Familie Münster&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/a&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;div class=&amp;quot;tile&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;a href=&amp;quot;https://www.gesundheitshaus-muenster.de/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;img src=&amp;quot;/w/images/e/e4/Hausdach.jpg&amp;quot; alt=&amp;quot;Bild 3&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;h3&amp;gt;Das Gesundheitshaus&amp;lt;/h3&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Weiterleitung auf die Seite des Gesundheitshauses.&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/a&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;h2&amp;gt;Vorsorge &amp;amp; Prävention&amp;lt;/h2&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;Hier erhältst du Details zu Vorsorgemaßnahmen und Präventionsangeboten.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;tiles-container&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;tile&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;a href=&amp;quot;https://www.stadt-muenster.de/gesundheit/kinder-und-jugendgesundheit/beratungsstelle-fruehe-hilfen&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;img src=&amp;quot;/w/images/1/15/Kind-baum.jpg&amp;quot; alt=&amp;quot;Bild 1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;h3&amp;gt;Beratungsstelle Frühe Hilfen&amp;lt;/h3&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Weiterleitung zur städtischen Seite der Frühen Hilfen im Gesundheitsamt&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/a&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;div class=&amp;quot;tile&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;a href=&amp;quot;https://www.krankenkassen.de/krankenkassen-vor-ort/muenster/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;img src=&amp;quot;/w/images/c/c8/Versicherung.jpg&amp;quot; alt=&amp;quot;Bild 2&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;h3&amp;gt;Krankenkassen in Münster&amp;lt;/h3&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Übericht über alle in Münster vorhandenen Krankenkassen&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/a&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;div class=&amp;quot;tile&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;a href=&amp;quot;https://www.stadt-muenster.de/gesundheit/kinder-und-jugendgesundheit/zahngesundheit&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;img src=&amp;quot;/w/images/a/a0/Zahn.jpg&amp;quot; alt=&amp;quot;Bild 3&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;h3&amp;gt;Zahngesundheit&amp;lt;/h3&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Weiterleitung zur städtischen Seite Zahngesundheit&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/a&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Widget:StartseitenSuche&amp;diff=1079</id>
		<title>Widget:StartseitenSuche</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Widget:StartseitenSuche&amp;diff=1079"/>
		<updated>2026-04-23T13:37:09Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
  .perplexity-search {&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    padding: 10px;&lt;br /&gt;
    background-color: #f0f0f0;&lt;br /&gt;
    border-radius: 5px;&lt;br /&gt;
    width: max-content;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .perplexity-search input[type=&amp;quot;text&amp;quot;] {&lt;br /&gt;
    width: 300px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .perplexity-search input[type=&amp;quot;submit&amp;quot;] {&lt;br /&gt;
    padding: 0px 20px;&lt;br /&gt;
    background-color: #4CAF50;&lt;br /&gt;
    color: white;&lt;br /&gt;
    border: none;&lt;br /&gt;
    border-radius: 3px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
.overlay-container {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  background-image:url(&amp;quot;/w/images/a/a9/Schloss-Muenster-Philipp-Foelting-CC-BY-SA.jpg&amp;quot;);&lt;br /&gt;
  background-size: cover;&lt;br /&gt;
  background-position: center;&lt;br /&gt;
  min-height:400px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.overlay-content {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  top: 50%; /* Position des Widgets */&lt;br /&gt;
  left: 50%;&lt;br /&gt;
  transform: translate(-50%, -50%);&lt;br /&gt;
  color: white; /* Textfarbe: Weiß */&lt;br /&gt;
  background-color: #00308D; /* Hintergrundfarbe: Blau */&lt;br /&gt;
  border-radius: 15px; /* Abgerundete Ecken */&lt;br /&gt;
  padding: 20px;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  width: 80%; /* Breite des Widgets, kannst du anpassen */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.overlay-content p {&lt;br /&gt;
  margin: 10px 0; /* Abstand zwischen den Textabsätzen */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.overlay-content .headline-text {&lt;br /&gt;
  font-size: 1.5em; /* Größerer Schriftzug */&lt;br /&gt;
  font-weight: bold; /* Dickere Schrift */&lt;br /&gt;
  margin: 10px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* To make images responsive */&lt;br /&gt;
.img-fluid img {&lt;br /&gt;
	max-width:100%;&lt;br /&gt;
	height:auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;overlay-container&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;div class=&amp;quot;overlay-content&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p class=&amp;quot;headline-text&amp;quot;&amp;gt;Wonach suchst du?&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;div class=&amp;quot;perplexity-search&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;form onsubmit=&amp;quot;window.open(&#039;https://www.perplexity.ai/?q=&#039; + encodeURIComponent(this.query.value), &#039;_blank&#039;); return false;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;query&amp;quot; placeholder=&amp;quot;z. B. Wie melde ich mich um?&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Suche&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;/form&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;p&amp;gt;Unser Münster Wiki und Informationen aus den öffentlichen Seiten in Münster stehen dir hier zur Verfügung. Beachte: KI-Suche kann Fehler enthalten. Bitte prüfe die Ergebnisse. Personenbezogenen Daten können zur Optimierung der KI genutzt werden &amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Project:Impressum&amp;diff=1075</id>
		<title>Project:Impressum</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Project:Impressum&amp;diff=1075"/>
		<updated>2026-04-14T12:51:50Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: Die Seite wurde neu angelegt: „Diese Webpräsenz wird angeboten durch      Vereinigung Freier Medien Münster     48143 Münster     Deutschland  == Nutzungsbedingungen ==  Jeder Benutzer ist für seine Beiträge selbst verantwortlich. Jeder Inhalt, der von einem Nutzer erstellt wurde, kann von jedem verändert werden. Das gilt nicht für die Inhalte der Hauptseite, die von den Verantwortlichen geändert werden dürfen. Werke, die angeblich die Rechte anderer verletzen, können direkt…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Diese Webpräsenz wird angeboten durch&lt;br /&gt;
&lt;br /&gt;
    Vereinigung Freier Medien Münster&lt;br /&gt;
    48143 Münster&lt;br /&gt;
    Deutschland&lt;br /&gt;
&lt;br /&gt;
== Nutzungsbedingungen ==&lt;br /&gt;
&lt;br /&gt;
Jeder Benutzer ist für seine Beiträge selbst verantwortlich. Jeder Inhalt, der von einem Nutzer erstellt wurde, kann von jedem verändert werden. Das gilt nicht für die Inhalte der Hauptseite, die von den Verantwortlichen geändert werden dürfen. Werke, die angeblich die Rechte anderer verletzen, können direkt und ohne Rücksprache korrigiert oder gelöscht werden. Der Anbieter kann einzelne Benutzer_innen ausschließen. Wer Dateien hochlädt, ist dafür verantwortlich. Administratoren können diese Daten jederzeit löschen, ohne dazu etwas zu erklären.&lt;br /&gt;
&lt;br /&gt;
Die Benutzer sollen alle Inhalte, die sie zu dieser Webseite beitragen, so gut wie möglich erstellen. Der Anbieter und die einzelnen Benutzer garantieren nicht für Vollständigkeit, Aktualität, Qualität und Richtigkeit. Wir sind nicht verantwortlich für Schäden, die durch Vertrauen auf die Inhalte dieser Webpräsenz oder deren Gebrauch entstehen.&lt;br /&gt;
&lt;br /&gt;
Der Anbieter erlaubt die Weitergabe der Daten in diesem Wiki, aber nur unter bestimmten Bedingungen.&lt;br /&gt;
&lt;br /&gt;
== Hinweis an Rechteinhaber ==&lt;br /&gt;
&lt;br /&gt;
Der Anbieter weist auf allen Eingabeseiten darauf hin, kein Material zu verwenden, das Urheberrechten Dritter unterliegt. Es gibt sehr viele deutsche elektronische und schriftliche Publikationen. Es kann trotzdem passieren, dass Benutzer Material einbringen, das bestehende Schutzrechte verletzt. Das wird dann aber nicht sofort erkannt.&lt;br /&gt;
&lt;br /&gt;
Wenn dem Anbieter eine Urheberrechtsverletzung angezeigt wird, wird das Material vom Server genommen.&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
	<entry>
		<id>https://www.muenster4you.de/w/index.php?title=Hauptseite&amp;diff=298</id>
		<title>Hauptseite</title>
		<link rel="alternate" type="text/html" href="https://www.muenster4you.de/w/index.php?title=Hauptseite&amp;diff=298"/>
		<updated>2024-11-27T20:53:33Z</updated>

		<summary type="html">&lt;p&gt;T0mch3n: /* Bereiche dieser Seite */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Willkommen in Münster==&lt;br /&gt;
Münster4you ist eine Plattform, die allen Menschen in Münster ermöglicht, Informationen schnell und unkompliziert abzurufen. Mit der Integration einer künstlichen Intelligenz, ähnlich wie eine Chat-Funktion, können alle Fragen stellen und erhalten Antworten für Münster, gleichzeitig findet sich neues und altbekanntes Wissen strukturiert aufbereitet.&lt;br /&gt;
&lt;br /&gt;
{{#widget:StartseitenSuche}}&lt;br /&gt;
&lt;br /&gt;
== Bereiche dieser Seite ==&lt;br /&gt;
{{#widget:StartseitenBild|bildUrl=/w/images/6/64/Pexels-cottonbro-5137967.jpeg|link=Ankommen|text=Ankommen in Münster}}&lt;br /&gt;
&lt;br /&gt;
{{#widget:StartseitenBild|bildUrl=/w/images/f/f8/Aasee-Herbst-03-Philipp-Foelting-CC-BY-SA.jpg|link=Freizeit|text=Die funtastische Landingpage &amp;quot;Freizeit &amp;amp; Socializing&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
{{#widget:StartseitenBild|bildUrl=/w/images/c/c2/Münster_oben.jpg|link=Stadtteile|text=Stadtteil-Infoseiten}}&lt;br /&gt;
&lt;br /&gt;
== Karte von Münster == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;display_map height=&amp;quot;300px&amp;quot; scrollwheelzoom=&amp;quot;off&amp;quot; service=&amp;quot;leaflet&amp;quot;&amp;gt;&lt;br /&gt;
  Münster, Germany~Die Stadt Münster~Mein schönes Münster~ ~ ~Münster&lt;br /&gt;
  Mauritz-Lindenweg 95, 48145 Münster~Münster 08~Bester Sportverein~ ~ ~Münster 08&lt;br /&gt;
&amp;lt;/display_map&amp;gt;&lt;/div&gt;</summary>
		<author><name>T0mch3n</name></author>
	</entry>
</feed>