<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Fun Tests &#8211; checkdich</title>
	<atom:link href="https://checkdich.at/category/category-fun/feed/" rel="self" type="application/rss+xml" />
	<link>https://checkdich.at</link>
	<description></description>
	<lastBuildDate>Fri, 01 May 2026 18:07:01 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.4</generator>

<image>
	<url>https://checkdich.at/wp-content/uploads/2026/04/favicon-150x150.png</url>
	<title>Fun Tests &#8211; checkdich</title>
	<link>https://checkdich.at</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Welches Pokemon bist du?</title>
		<link>https://checkdich.at/category-fun/welches-pokemon-waerst-du-test/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Fri, 01 May 2026 18:05:18 +0000</pubDate>
				<category><![CDATA[Fun Tests]]></category>
		<guid isPermaLink="false">https://checkdich.at/?p=1746</guid>

					<description><![CDATA[Ergebnis anzeigen Zurücksetzen &#8222;` Passende nächste Tests &#8222;`]]></description>
			<style id="elementor-post-1746">.elementor-1746 .elementor-element.elementor-element-7e65b15{--display:flex;--flex-direction:column;--container-widget-width:100%;--container-widget-height:initial;--container-widget-flex-grow:0;--container-widget-align-self:initial;--flex-wrap-mobile:wrap;}</style>							<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="1746" class="elementor elementor-1746" data-elementor-post-type="post">
				<div class="elementor-element elementor-element-7e65b15 e-flex e-con-boxed e-con e-parent" data-id="7e65b15" data-element_type="container" data-e-type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-24a0eed elementor-widget elementor-widget-html" data-id="24a0eed" data-element_type="widget" data-e-type="widget" data-widget_type="html.default">
					<style> .dep-test-wrap{   max-width: 860px;   margin: 32px auto;   padding: 24px;   background: #fff;   border: 1px solid #e7ecf3;   border-radius: 18px;   box-shadow: 0 8px 24px rgba(15, 23, 42, 0.06);   font-family: Arial, sans-serif;   color: #1f2937; }  .dep-test-header{   margin-bottom: 24px; }  .dep-test-title{   margin: 0 0 10px 0;   font-size: 30px;   line-height: 1.2;   font-weight: 700;   color: #111827; }  .dep-test-intro{   margin: 0;   font-size: 16px;   line-height: 1.6;   color: #4b5563; }  .dep-test-error{   display: none;   margin: 0 0 22px 0;   padding: 14px 16px;   border: 1px solid #f3c2c2;   background: #fff4f4;   color: #9f1d1d;   border-radius: 12px;   font-size: 14px;   line-height: 1.5; }  .dep-question{   margin-bottom: 22px;   padding: 18px;   border: 1px solid #e7ecf3;   border-radius: 16px;   background: #fbfcfe; }  .dep-question-title{   margin: 0 0 14px 0;   font-size: 17px;   line-height: 1.5;   font-weight: 700;   color: #111827; }  .dep-answer{   display: flex;   align-items: center;   gap: 10px;   margin-top: 8px;   padding: 12px 14px;   border: 1px solid #dde5ef;   border-radius: 12px;   background: #fff;   cursor: pointer;   transition: border-color .18s ease, box-shadow .18s ease, background .18s ease; }  .dep-answer:hover{   border-color: #bfd0e6;   background: #f8fbff; }  .dep-answer input{   margin: 0;   flex: 0 0 auto; }  .dep-answer-text{   font-size: 15px;   line-height: 1.45;   color: #1f2937; }  .dep-actions{   margin-top: 24px; }  .dep-btn{   display: inline-block;   width: 100%;   border: 0;   border-radius: 14px;   padding: 15px 18px;   background: #2563eb;   color: #fff;   font-size: 16px;   font-weight: 700;   cursor: pointer;   transition: transform .15s ease, box-shadow .15s ease, background .15s ease;   box-shadow: 0 10px 22px rgba(37, 99, 235, 0.18); }  .dep-btn:hover{   background: #1d4ed8; }  .dep-btn:focus{   outline: 3px solid rgba(37, 99, 235, 0.2);   outline-offset: 2px; }  .dep-btn:active{   transform: translateY(1px); }  .dep-btn-secondary{   margin-top: 12px;   background: #e5e7eb;   color: #1f2937;   box-shadow: none; }  .dep-btn-secondary:hover{   background: #dbe1e8; }  .dep-result{   display: none;   margin-top: 30px;   padding-top: 10px; }  .dep-result-hero{   padding: 24px 20px;   border-radius: 18px;   margin-bottom: 18px;   text-align: center;   border: 1px solid transparent; }  .dep-result-hero--low{   background: #eef6ff;   border-color: #cfe3ff; }  .dep-result-hero--mild{   background: #f4f8ff;   border-color: #d9e7ff; }  .dep-result-hero--mid{   background: #fff7e8;   border-color: #f4ddb0; }  .dep-result-hero--high{   background: #fff0f0;   border-color: #f1c6c6; }  .dep-result-title{   margin: 0;   font-size: 31px;   line-height: 1.15;   font-weight: 800;   color: #111827; }  .dep-result-subtitle{   margin: 12px auto 0 auto;   max-width: 680px;   font-size: 17px;   line-height: 1.6;   color: #374151; }  .dep-card{   margin-bottom: 14px;   padding: 18px;   border: 1px solid #e7ecf3;   border-radius: 16px;   background: #fff; }  .dep-card-heading{   margin: 0 0 10px 0;   font-size: 15px;   line-height: 1.3;   font-weight: 800;   letter-spacing: .02em;   text-transform: uppercase;   color: #475569; }  .dep-card-text{   font-size: 15px;   line-height: 1.7;   color: #1f2937; }  .dep-card-text p{   margin: 0 0 12px 0; }  .dep-card-text p:last-child{   margin-bottom: 0; }  .dep-advice-list{   margin: 0;   padding-left: 18px; }  .dep-advice-list li{   margin: 0 0 8px 0;   line-height: 1.6; }  .dep-links-grid{   display: grid;   gap: 10px; }  .dep-link-card{   display: block;   padding: 14px 16px;   border: 1px solid #dbe5f0;   border-radius: 14px;   text-decoration: none;   background: #f8fbff;   color: #0f172a;   font-weight: 700;   transition: border-color .18s ease, transform .18s ease, background .18s ease; }  .dep-link-card:hover{   border-color: #bfd0e6;   background: #f1f7ff;   transform: translateY(-1px); }  .dep-score-meta{   margin-top: 16px;   font-size: 18px;   line-height: 1.4;   font-weight: 700;   color: #334155;   text-align: center; }  .dep-result-note{   display: none;   margin-top: 14px;   font-size: 14px;   line-height: 1.6;   color: #475569;   text-align: center; }  .dep-result-hero-media{   display: none;   justify-content: center;   align-items: center;   margin: 0 0 14px 0; }  .dep-result-hero-media img{   display: block;   max-width: 88px;   max-height: 88px;   width: auto;   height: auto; }  @media (max-width: 640px){   .dep-test-wrap{     padding: 18px;     border-radius: 14px;   }    .dep-test-title{     font-size: 25px;   }    .dep-result-title{     font-size: 26px;   }    .dep-result-subtitle{     font-size: 16px;   }    .dep-question{     padding: 14px;   }    .dep-answer{     padding: 11px 12px;   }    .dep-score-meta{     font-size: 17px;   }    .dep-result-hero-media img{     max-width: 76px;     max-height: 76px;   } } </style>

<div class="dep-test-wrap" id="depTestWrap">
  <div class="dep-test-header">
    <h1 class="dep-test-title" id="depTestTitle"></h1>
    <p class="dep-test-intro" id="depTestIntro"></p>
  </div>

  <div class="dep-test-error" id="depTestError"></div>

  <div id="depTestQuestions"></div>

  <div class="dep-actions">
    <button class="dep-btn" id="depTestSubmit" type="button">Ergebnis anzeigen</button>
    <button class="dep-btn dep-btn-secondary" id="depTestReset" type="button">Zurücksetzen</button>
  </div>

  <div class="dep-result" id="depTestResult">
    <div class="dep-result-hero" id="depResultHero">
      <div class="dep-result-hero-media" id="depResultHeroMedia">
        <img decoding="async" id="depResultHeroImage" src="" alt="">
      </div>
      <div class="dep-score-meta" id="depScoreMeta"></div>
      <h3 class="dep-result-title" id="depResultTitle"></h3>
      <div class="dep-result-note" id="depResultNote"></div>
    </div>

```
<div class="dep-card">
  <div class="dep-card-heading">Passende nächste Tests</div>
  <div class="dep-links-grid" id="depLinks"></div>
</div>
```

  </div>
</div>

<script>
const TEST_DATA = {
  title: "Welches Pokémon bist du?",
  intro:"Mach jetzt den Test und finde heraus welches Pokemon du bist!",
  tieBreakOrder: ["pikachu", "glumanda", "schiggy", "bisasam"],
  resultItems: [
    {
      id: "pikachu",
      badge: "Dein Ergebnis",
      title: "Du bist Pikachu",
      heroStyle: "low",
      links: [
        {
          slug: "bist-du-rick-oder-morty-test",
          title: "Bist du Rick oder Morty?",
          url: "/fun-tests/bist-du-rick-oder-morty-test/"
        },
        {
          slug: "welche-hunderasse-waerst-du-test",
          title: "Welche Hunderasse wärst du?",
          url: "/fun-tests/welche-hunderasse-waerst-du-test/"
        },
        {
          slug: "welche-katzenrasse-waerst-du-test",
          title: "Welche Katzenrasse wärst du?",
          url: "/fun-tests/welche-katzenrasse-waerst-du-test/"
        }
      ]
    },
    {
      id: "glumanda",
      badge: "Dein Ergebnis",
      title: "Du bist Glumanda",
      heroStyle: "high",
      links: [
        {
          slug: "bist-du-rick-oder-morty-test",
          title: "Bist du Rick oder Morty?",
          url: "/fun-tests/bist-du-rick-oder-morty-test/"
        },
        {
          slug: "welche-hunderasse-waerst-du-test",
          title: "Welche Hunderasse wärst du?",
          url: "/fun-tests/welche-hunderasse-waerst-du-test/"
        },
        {
          slug: "welche-katzenrasse-waerst-du-test",
          title: "Welche Katzenrasse wärst du?",
          url: "/fun-tests/welche-katzenrasse-waerst-du-test/"
        }
      ]
    },
    {
      id: "schiggy",
      badge: "Dein Ergebnis",
      title: "Du bist Schiggy",
      heroStyle: "mild",
      links: [
        {
          slug: "bist-du-rick-oder-morty-test",
          title: "Bist du Rick oder Morty?",
          url: "/fun-tests/bist-du-rick-oder-morty-test/"
        },
        {
          slug: "welche-hunderasse-waerst-du-test",
          title: "Welche Hunderasse wärst du?",
          url: "/fun-tests/welche-hunderasse-waerst-du-test/"
        },
        {
          slug: "welche-katzenrasse-waerst-du-test",
          title: "Welche Katzenrasse wärst du?",
          url: "/fun-tests/welche-katzenrasse-waerst-du-test/"
        }
      ]
    },
    {
      id: "bisasam",
      badge: "Dein Ergebnis",
      title: "Du bist Bisasam",
      heroStyle: "mid",
      links: [
        {
          slug: "bist-du-rick-oder-morty-test",
          title: "Bist du Rick oder Morty?",
          url: "/fun-tests/bist-du-rick-oder-morty-test/"
        },
        {
          slug: "welche-hunderasse-waerst-du-test",
          title: "Welche Hunderasse wärst du?",
          url: "/fun-tests/welche-hunderasse-waerst-du-test/"
        },
        {
          slug: "welche-katzenrasse-waerst-du-test",
          title: "Welche Katzenrasse wärst du?",
          url: "/fun-tests/welche-katzenrasse-waerst-du-test/"
        }
      ]
    }
  ],
  questions: [
    {
      text: "Du kommst in einer neuen Stadt an. Was machst du als Erstes?",
      answers: [
        { text: "Ich gehe direkt auf Leute zu und bin sofort mittendrin.", points: { pikachu: 2, glumanda: 1 } },
        { text: "Ich suche mir sofort etwas Spannendes und stürze mich ins Abenteuer.", points: { glumanda: 2, pikachu: 1 } },
        { text: "Ich schaue mich erst in Ruhe um und verschaffe mir einen Überblick.", points: { schiggy: 2, bisasam: 1 } },
        { text: "Ich suche einen angenehmen Platz und nehme erst einmal die Stimmung auf.", points: { bisasam: 2, schiggy: 1 } }
      ]
    },
    {
      text: "In einer Gruppe soll spontan jemand die Führung übernehmen. Wie reagierst du?",
      answers: [
        { text: "Ich motiviere die anderen und bringe schnell Energie rein.", points: { pikachu: 2, glumanda: 1 } },
        { text: "Ich übernehme sofort, weil ich Lust auf die Herausforderung habe.", points: { glumanda: 2, pikachu: 1 } },
        { text: "Ich koordiniere lieber ruhig und halte alles zusammen.", points: { schiggy: 2, bisasam: 1 } },
        { text: "Ich achte zuerst darauf, dass sich alle wohlfühlen und niemand untergeht.", points: { bisasam: 2, schiggy: 1 } }
      ]
    },
    {
      text: "Dein perfekter freier Nachmittag sieht wie aus?",
      answers: [
        { text: "Mit Freunden, guter Stimmung und etwas, das richtig Spaß macht.", points: { pikachu: 2, schiggy: 1 } },
        { text: "Etwas Action, Wettkampf oder eine spontane Idee mit Kick.", points: { glumanda: 2, pikachu: 1 } },
        { text: "Entspannt, locker und ohne Hektik, aber trotzdem nicht langweilig.", points: { schiggy: 2, bisasam: 1 } },
        { text: "Ruhig, gemütlich und am besten irgendwo im Grünen.", points: { bisasam: 2, schiggy: 1 } }
      ]
    },
    {
      text: "Jemand provoziert dich in einem Spiel. Was passt am ehesten zu dir?",
      answers: [
        { text: "Ich grinse, kontere locker und lasse mich nicht runterziehen.", points: { pikachu: 2, schiggy: 1 } },
        { text: "Ich will jetzt erst recht gewinnen und gehe voll rein.", points: { glumanda: 2, pikachu: 1 } },
        { text: "Ich bleibe cool und spiele meine Strategie sauber weiter.", points: { schiggy: 2, bisasam: 1 } },
        { text: "Ich halte mich aus unnötigem Drama raus und bleibe bei mir.", points: { bisasam: 2, schiggy: 1 } }
      ]
    },
    {
      text: "Du findest einen geheimen Weg in einem Abenteuerpark. Was tust du?",
      answers: [
        { text: "Ich rufe die anderen und will das gemeinsam entdecken.", points: { pikachu: 2, glumanda: 1 } },
        { text: "Ich bin sofort vorne und probiere ihn als Erstes aus.", points: { glumanda: 2, pikachu: 1 } },
        { text: "Ich prüfe erst, ob der Weg sinnvoll und sicher aussieht.", points: { schiggy: 2, bisasam: 1 } },
        { text: "Ich frage mich erst, ob sich der Umweg überhaupt lohnt.", points: { bisasam: 2, schiggy: 1 } }
      ]
    },
    {
      text: "Welche Rolle hast du eher in deinem Freundeskreis?",
      answers: [
        { text: "Die Person, die Stimmung reinbringt und andere mitzieht.", points: { pikachu: 2, glumanda: 1 } },
        { text: "Die Person, die mutig vorangeht und Dinge lostritt.", points: { glumanda: 2, pikachu: 1 } },
        { text: "Die Person, die ruhig bleibt und oft den klaren Kopf behält.", points: { schiggy: 2, bisasam: 1 } },
        { text: "Die Person, bei der man runterkommt und sich gut aufgehoben fühlt.", points: { bisasam: 2, schiggy: 1 } }
      ]
    },
    {
      text: "Bei einem Wettbewerb zählt heute nur dein Stil. Womit punktest du?",
      answers: [
        { text: "Mit Charme, Tempo und einer mitreißenden Ausstrahlung.", points: { pikachu: 2, glumanda: 1 } },
        { text: "Mit Kraft, Mut und einer klaren Kampfansage.", points: { glumanda: 2, pikachu: 1 } },
        { text: "Mit Kontrolle, Timing und einem sicheren Plan.", points: { schiggy: 2, bisasam: 1 } },
        { text: "Mit Gelassenheit, Ausdauer und natürlicher Stärke.", points: { bisasam: 2, schiggy: 1 } }
      ]
    },
    {
      text: "Du bekommst ein seltenes Item. Wofür nutzt du es am ehesten?",
      answers: [
        { text: "Für etwas Lustiges, das sofort einen Effekt hat.", points: { pikachu: 2, glumanda: 1 } },
        { text: "Für ein riskantes Upgrade mit maximalem Potenzial.", points: { glumanda: 2, pikachu: 1 } },
        { text: "Ich hebe es für den richtigen Moment auf.", points: { schiggy: 2, bisasam: 1 } },
        { text: "Ich nutze es so, dass es langfristig wirklich etwas bringt.", points: { bisasam: 2, schiggy: 1 } }
      ]
    },
    {
      text: "Wie wirkt dein Zimmer oder dein Schreibtisch eher auf andere?",
      answers: [
        { text: "Lebendig, spontan und ein bisschen chaotisch auf gute Art.", points: { pikachu: 2, glumanda: 1 } },
        { text: "Markant, auffällig und mit klarer Persönlichkeit.", points: { glumanda: 2, pikachu: 1 } },
        { text: "Ordentlich genug, damit ich alles schnell finde.", points: { schiggy: 2, bisasam: 1 } },
        { text: "Ruhig, gemütlich und angenehm statt überladen.", points: { bisasam: 2, schiggy: 1 } }
      ]
    },
    {
      text: "Du darfst eine Superkraft für einen Tag wählen. Welche nimmst du?",
      answers: [
        { text: "Etwas Blitzschnelles, mit dem ich überall sofort für Wirbel sorge.", points: { pikachu: 2, glumanda: 1 } },
        { text: "Etwas Explosives, mit dem ich Hindernisse einfach wegräume.", points: { glumanda: 2, pikachu: 1 } },
        { text: "Etwas Defensives, mit dem ich alles unter Kontrolle halte.", points: { schiggy: 2, bisasam: 1 } },
        { text: "Etwas Natürliches, mit dem ich Dinge wachsen und heilen lassen kann.", points: { bisasam: 2, schiggy: 1 } }
      ]
    }
  ]
};

(function () {
  "use strict";

  if (typeof TEST_DATA === "undefined") {
    const errorBox = document.getElementById("depTestError");
    errorBox.style.display = "block";
    errorBox.textContent = "Fehler: TEST_DATA wurde nicht gefunden. Die Engine braucht gültige Testdaten.";
    return;
  }

  const REQUIRED_TOP_LEVEL_FIELDS = ["title", "intro", "questions", "resultItems", "tieBreakOrder"];
  const REQUIRED_RESULT_FIELDS = ["id", "badge", "title", "links", "heroStyle"];
  const REQUIRED_LINK_FIELDS = ["slug", "title", "url"];
  const REQUIRED_QUESTION_FIELDS = ["text", "answers"];
  const REQUIRED_ANSWER_FIELDS = ["text", "points"];
  const ALLOWED_HERO_STYLES = ["low", "mild", "mid", "high"];

  const el = {
    wrap: document.getElementById("depTestWrap"),
    title: document.getElementById("depTestTitle"),
    intro: document.getElementById("depTestIntro"),
    error: document.getElementById("depTestError"),
    questions: document.getElementById("depTestQuestions"),
    submit: document.getElementById("depTestSubmit"),
    reset: document.getElementById("depTestReset"),
    result: document.getElementById("depTestResult"),
    resultHero: document.getElementById("depResultHero"),
    resultHeroMedia: document.getElementById("depResultHeroMedia"),
    resultHeroImage: document.getElementById("depResultHeroImage"),
    resultTitle: document.getElementById("depResultTitle"),
    scoreMeta: document.getElementById("depScoreMeta"),
    resultNote: document.getElementById("depResultNote"),
    links: document.getElementById("depLinks")
  };

  function showError(message) {
    el.error.style.display = "block";
    el.error.textContent = message;
  }

  function clearError() {
    el.error.style.display = "none";
    el.error.textContent = "";
  }

  function escapeHtml(str) {
    return String(str)
      .replace(/&/g, "&amp;")
      .replace(/</g, "&lt;")
      .replace(/>/g, "&gt;")
      .replace(/"/g, "&quot;")
      .replace(/'/g, "&#039;");
  }

  function isNonEmptyString(value) {
    return typeof value === "string" && value.trim() !== "";
  }

  function nl2p(text) {
    return String(text)
      .split(/\n{2,}/)
      .map(part => "<p>" + escapeHtml(part).replace(/\n/g, "<br>") + "</p>")
      .join("");
  }

  function endsWithSlug(url, slug) {
    const cleanUrl = String(url).replace(/\/+$/, "");
    const cleanSlug = String(slug).replace(/^\/+|\/+$/g, "");
    return cleanUrl.endsWith("/" + cleanSlug);
  }

  function validateTopLevelFields(data) {
    for (const key of REQUIRED_TOP_LEVEL_FIELDS) {
      if (!(key in data)) {
        return "Fehler: In TEST_DATA fehlt das Pflichtfeld '" + key + "'.";
      }
    }

    if (!isNonEmptyString(data.title)) {
      return "Fehler: TEST_DATA.title ist leer oder ungültig.";
    }

    if (!isNonEmptyString(data.intro)) {
      return "Fehler: TEST_DATA.intro ist leer oder ungültig.";
    }

    if (!Array.isArray(data.resultItems) || data.resultItems.length < 2) {
      return "Fehler: TEST_DATA.resultItems muss mindestens 2 konkrete Ergebnisse enthalten.";
    }

    if (!Array.isArray(data.tieBreakOrder) || data.tieBreakOrder.length !== data.resultItems.length) {
      return "Fehler: TEST_DATA.tieBreakOrder muss alle Ergebnis-IDs genau einmal enthalten.";
    }

    if (!Array.isArray(data.questions) || data.questions.length !== 10) {
      return "Fehler: TEST_DATA.questions muss genau 10 Fragen enthalten.";
    }

    return null;
  }

  function validateResultItems(data) {
    const seenIds = new Set();

    for (let i = 0; i < data.resultItems.length; i++) {
      const result = data.resultItems[i];

      if (!result || typeof result !== "object" || Array.isArray(result)) {
        return "Fehler: TEST_DATA.resultItems[" + i + "] ist ungültig.";
      }

      for (const field of REQUIRED_RESULT_FIELDS) {
        if (!(field in result)) {
          return "Fehler: In TEST_DATA.resultItems[" + i + "] fehlt das Feld '" + field + "'.";
        }
      }

      if (!isNonEmptyString(result.id)) {
        return "Fehler: TEST_DATA.resultItems[" + i + "].id ist leer oder ungültig.";
      }

      if (seenIds.has(result.id)) {
        return "Fehler: Die Ergebnis-ID '" + result.id + "' ist doppelt vorhanden.";
      }

      if (!isNonEmptyString(result.badge)) {
        return "Fehler: TEST_DATA.resultItems[" + i + "].badge ist leer oder ungültig.";
      }

      if (!isNonEmptyString(result.title)) {
        return "Fehler: TEST_DATA.resultItems[" + i + "].title ist leer oder ungültig.";
      }

      if (!Array.isArray(result.links) || result.links.length < 2 || result.links.length > 3) {
        return "Fehler: TEST_DATA.resultItems[" + i + "].links muss 2 bis 3 weiterführende Tests enthalten.";
      }

      if (!isNonEmptyString(result.heroStyle) || !ALLOWED_HERO_STYLES.includes(result.heroStyle)) {
        return "Fehler: TEST_DATA.resultItems[" + i + "].heroStyle ist ungültig. Erlaubt sind: low, mild, mid, high.";
      }

      if ("image" in result && result.image !== null && !isNonEmptyString(result.image)) {
        return "Fehler: TEST_DATA.resultItems[" + i + "].image ist ungültig.";
      }

      if ("imageAlt" in result && result.imageAlt !== null && !isNonEmptyString(result.imageAlt)) {
        return "Fehler: TEST_DATA.resultItems[" + i + "].imageAlt ist ungültig.";
      }

      const seenSlugs = new Set();

      for (let j = 0; j < result.links.length; j++) {
        const link = result.links[j];

        if (!link || typeof link !== "object" || Array.isArray(link)) {
          return "Fehler: Ein Link in TEST_DATA.resultItems[" + i + "].links ist ungültig.";
        }

        for (const field of REQUIRED_LINK_FIELDS) {
          if (!(field in link)) {
            return "Fehler: In TEST_DATA.resultItems[" + i + "].links[" + j + "] fehlt das Feld '" + field + "'.";
          }
        }

        if (!isNonEmptyString(link.slug)) {
          return "Fehler: Ein Link in TEST_DATA.resultItems[" + i + "].links hat keinen gültigen Slug.";
        }

        if (!isNonEmptyString(link.title)) {
          return "Fehler: Ein Link in TEST_DATA.resultItems[" + i + "].links hat keinen gültigen Titel.";
        }

        if (!isNonEmptyString(link.url)) {
          return "Fehler: Ein Link in TEST_DATA.resultItems[" + i + "].links hat keine gültige URL.";
        }

        if (seenSlugs.has(link.slug)) {
          return "Fehler: In TEST_DATA.resultItems[" + i + "] gibt es doppelte Links mit dem Slug '" + link.slug + "'.";
        }

        if (!endsWithSlug(link.url, link.slug)) {
          return "Fehler: In TEST_DATA.resultItems[" + i + "] passt die URL nicht zum Slug '" + link.slug + "'.";
        }

        seenSlugs.add(link.slug);
      }

      seenIds.add(result.id);
    }

    return null;
  }

  function validateTieBreakOrder(data) {
    const resultIds = data.resultItems.map(item => item.id).sort();
    const tieBreakIds = data.tieBreakOrder.slice().sort();

    if (JSON.stringify(resultIds) !== JSON.stringify(tieBreakIds)) {
      return "Fehler: TEST_DATA.tieBreakOrder passt nicht exakt zu den IDs aus TEST_DATA.resultItems.";
    }

    return null;
  }

  function validateQuestions(data) {
    const validResultIds = new Set(data.resultItems.map(item => item.id));
    const reachableResultIds = new Set();

    for (let i = 0; i < data.questions.length; i++) {
      const question = data.questions[i];

      if (!question || typeof question !== "object" || Array.isArray(question)) {
        return "Fehler: Frage " + (i + 1) + " ist ungültig.";
      }

      for (const field of REQUIRED_QUESTION_FIELDS) {
        if (!(field in question)) {
          return "Fehler: In Frage " + (i + 1) + " fehlt das Feld '" + field + "'.";
        }
      }

      if (!isNonEmptyString(question.text)) {
        return "Fehler: Frage " + (i + 1) + " hat keinen gültigen Text.";
      }

      if (!Array.isArray(question.answers) || question.answers.length !== 4) {
        return "Fehler: Frage " + (i + 1) + " muss genau 4 Antworten haben.";
      }

      for (let j = 0; j < question.answers.length; j++) {
        const answer = question.answers[j];

        if (!answer || typeof answer !== "object" || Array.isArray(answer)) {
          return "Fehler: Frage " + (i + 1) + ", Antwort " + (j + 1) + " ist ungültig.";
        }

        for (const field of REQUIRED_ANSWER_FIELDS) {
          if (!(field in answer)) {
            return "Fehler: In Frage " + (i + 1) + ", Antwort " + (j + 1) + " fehlt das Feld '" + field + "'.";
          }
        }

        if (!isNonEmptyString(answer.text)) {
          return "Fehler: Frage " + (i + 1) + ", Antwort " + (j + 1) + " hat keinen gültigen Text.";
        }

        if (typeof answer.points !== "object" || answer.points === null || Array.isArray(answer.points)) {
          return "Fehler: Frage " + (i + 1) + ", Antwort " + (j + 1) + " braucht ein gültiges points-Objekt.";
        }

        const pointKeys = Object.keys(answer.points);

        if (pointKeys.length === 0) {
          return "Fehler: Frage " + (i + 1) + ", Antwort " + (j + 1) + " muss mindestens einem Ergebnis Punkte geben.";
        }

        for (const resultId of pointKeys) {
          if (!validResultIds.has(resultId)) {
            return "Fehler: Frage " + (i + 1) + ", Antwort " + (j + 1) + " verweist auf die unbekannte Ergebnis-ID '" + resultId + "'.";
          }

          const value = answer.points[resultId];

          if (!Number.isInteger(value) || value < 0) {
            return "Fehler: Frage " + (i + 1) + ", Antwort " + (j + 1) + " hat bei '" + resultId + "' keinen gültigen Punktwert.";
          }

          if (value > 0) {
            reachableResultIds.add(resultId);
          }
        }
      }
    }

    const unreachableIds = data.resultItems
      .map(item => item.id)
      .filter(id => !reachableResultIds.has(id));

    if (unreachableIds.length > 0) {
      return "Fehler: Diese Ergebnisse sind über keine Antwort erreichbar: " + unreachableIds.join(", ") + ".";
    }

    return null;
  }

  function validateTestData(data) {
    const topLevelError = validateTopLevelFields(data);
    if (topLevelError) {
      return topLevelError;
    }

    const resultItemsError = validateResultItems(data);
    if (resultItemsError) {
      return resultItemsError;
    }

    const tieBreakError = validateTieBreakOrder(data);
    if (tieBreakError) {
      return tieBreakError;
    }

    const questionsError = validateQuestions(data);
    if (questionsError) {
      return questionsError;
    }

    return null;
  }

  function renderQuestions(data, userAnswers) {
    let html = "";

    data.questions.forEach((question, qIndex) => {
      html += `
        <div class="dep-question">
          <div class="dep-question-title">${qIndex + 1}. ${escapeHtml(question.text)}</div>
      `;

      question.answers.forEach((answer, aIndex) => {
        const inputId = `depQ${qIndex}A${aIndex}`;

        html += `
          <label class="dep-answer" for="${inputId}">
            <input
              type="radio"
              id="${inputId}"
              name="depQ${qIndex}"
              value="${aIndex}"
              ${userAnswers[qIndex] === aIndex ? "checked" : ""}
            >
            <span class="dep-answer-text">${escapeHtml(answer.text)}</span>
          </label>
        `;
      });

      html += `</div>`;
    });

    el.questions.innerHTML = html;
  }

  function bindAnswerEvents(userAnswers) {
    const radioInputs = el.questions.querySelectorAll('input[type="radio"]');

    radioInputs.forEach(input => {
      input.addEventListener("change", function () {
        const qIndex = Number(this.name.replace("depQ", ""));
        userAnswers[qIndex] = Number(this.value);
        clearError();
      });
    });
  }

  function renderTraitsList(items) {
    const lis = items.map(item => "<li>" + escapeHtml(item) + "</li>").join("");
    return '<ul class="dep-advice-list">' + lis + "</ul>";
  }

  function renderLinks(links) {
    return links.map(link => {
      return `
        <a class="dep-link-card" href="${escapeHtml(link.url)}" data-slug="${escapeHtml(link.slug)}">
          ${escapeHtml(link.title)}
        </a>
      `;
    }).join("");
  }

  function buildResultScores(data, userAnswers) {
    const scores = {};

    data.resultItems.forEach(item => {
      scores[item.id] = 0;
    });

    data.questions.forEach((question, qIndex) => {
      const selectedAnswerIndex = userAnswers[qIndex];
      const selectedAnswer = question.answers[selectedAnswerIndex];

      Object.keys(selectedAnswer.points).forEach(resultId => {
        scores[resultId] += selectedAnswer.points[resultId];
      });
    });

    return scores;
  }

  function getWinningResultId(scores, tieBreakOrder) {
    const maxScore = Math.max.apply(null, Object.values(scores));
    const candidates = Object.keys(scores).filter(resultId => scores[resultId] === maxScore);

    if (candidates.length === 1) {
      return candidates[0];
    }

    for (const resultId of tieBreakOrder) {
      if (candidates.includes(resultId)) {
        return resultId;
      }
    }

    return tieBreakOrder[0];
  }

  function getResultById(data, resultId) {
    return data.resultItems.find(item => item.id === resultId) || null;
  }

  function getHeroClassByStyle(heroStyle) {
    if (heroStyle === "low") return "dep-result-hero dep-result-hero--low";
    if (heroStyle === "mild") return "dep-result-hero dep-result-hero--mild";
    if (heroStyle === "mid") return "dep-result-hero dep-result-hero--mid";
    return "dep-result-hero dep-result-hero--high";
  }

  function resetHeroMedia() {
    el.resultHeroMedia.style.display = "none";
    el.resultHeroImage.removeAttribute("src");
    el.resultHeroImage.setAttribute("alt", "");
  }

  function renderHeroMedia(resultData) {
    if (isNonEmptyString(resultData.image)) {
      el.resultHeroImage.src = resultData.image;
      el.resultHeroImage.alt = isNonEmptyString(resultData.imageAlt) ? resultData.imageAlt : resultData.title;
      el.resultHeroMedia.style.display = "flex";
      return;
    }

    resetHeroMedia();
  }

  function resetTest(userAnswers) {
    for (let i = 0; i < userAnswers.length; i++) {
      userAnswers[i] = undefined;
    }

    const radioInputs = el.questions.querySelectorAll('input[type="radio"]');
    radioInputs.forEach(input => {
      input.checked = false;
    });

    clearError();
    el.result.style.display = "none";
    el.resultHero.className = "dep-result-hero";
    el.scoreMeta.textContent = "";
    el.scoreMeta.style.display = "none";
    el.resultNote.textContent = "";
    el.resultNote.style.display = "none";
    el.resultTitle.textContent = "";
    el.links.innerHTML = "";
    resetHeroMedia();
    el.wrap.scrollIntoView({ behavior: "smooth", block: "start" });
  }

  function renderResult(resultData) {
    el.resultHero.className = getHeroClassByStyle(resultData.heroStyle);
    renderHeroMedia(resultData);
    el.resultTitle.textContent = resultData.title;
    el.scoreMeta.textContent = resultData.badge;
    el.scoreMeta.style.display = "block";
    el.resultNote.textContent = "";
    el.resultNote.style.display = "none";
    el.links.innerHTML = renderLinks(resultData.links);

    el.result.style.display = "block";
    el.result.scrollIntoView({ behavior: "smooth", block: "start" });
  }

  function init() {
    const validationError = validateTestData(TEST_DATA);

    if (validationError) {
      showError(validationError);
      return;
    }

    clearError();

    el.title.textContent = TEST_DATA.title;
    el.intro.textContent = TEST_DATA.intro;
    el.scoreMeta.style.display = "none";
    el.resultNote.style.display = "none";
    resetHeroMedia();

    const userAnswers = new Array(TEST_DATA.questions.length).fill(undefined);

    renderQuestions(TEST_DATA, userAnswers);
    bindAnswerEvents(userAnswers);

    el.submit.addEventListener("click", function () {
      const unanswered = userAnswers
        .map((value, index) => value === undefined ? index + 1 : null)
        .filter(Boolean);

      if (unanswered.length > 0) {
        el.result.style.display = "none";
        showError("Bitte beantworte alle Fragen. Offen: " + unanswered.join(", "));
        el.error.scrollIntoView({ behavior: "smooth", block: "center" });
        return;
      }

      clearError();

      const scores = buildResultScores(TEST_DATA, userAnswers);
      const winningResultId = getWinningResultId(scores, TEST_DATA.tieBreakOrder);
      const resultData = getResultById(TEST_DATA, winningResultId);

      if (!resultData) {
        showError("Fehler: Das Ergebnis konnte nicht berechnet werden.");
        return;
      }

      renderResult(resultData);
    });

    el.reset.addEventListener("click", function () {
      resetTest(userAnswers);
    });
  }

  init();
})();
</script>
				</div>
					</div>
				</div>
				</div>
		]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Welcher Disney Bösewicht bist du?</title>
		<link>https://checkdich.at/category-fun/welcher-antiheld-waerst-du-test/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Fri, 01 May 2026 18:03:18 +0000</pubDate>
				<category><![CDATA[Fun Tests]]></category>
		<guid isPermaLink="false">https://checkdich.at/?p=1741</guid>

					<description><![CDATA[Ergebnis anzeigen Zurücksetzen &#8222;` Passende nächste Tests &#8222;`]]></description>
			<style id="elementor-post-1741">.elementor-1741 .elementor-element.elementor-element-2368240{--display:flex;--flex-direction:column;--container-widget-width:100%;--container-widget-height:initial;--container-widget-flex-grow:0;--container-widget-align-self:initial;--flex-wrap-mobile:wrap;}</style>							<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="1741" class="elementor elementor-1741" data-elementor-post-type="post">
				<div class="elementor-element elementor-element-2368240 e-flex e-con-boxed e-con e-parent" data-id="2368240" data-element_type="container" data-e-type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-1e4aa50 elementor-widget elementor-widget-html" data-id="1e4aa50" data-element_type="widget" data-e-type="widget" data-widget_type="html.default">
					<style>
.dep-test-wrap{
  max-width: 860px;
  margin: 32px auto;
  padding: 24px;
  background: #fff;
  border: 1px solid #e7ecf3;
  border-radius: 18px;
  box-shadow: 0 8px 24px rgba(15, 23, 42, 0.06);
  font-family: Arial, sans-serif;
  color: #1f2937;
}

.dep-test-header{
  margin-bottom: 24px;
}

.dep-test-title{
  margin: 0 0 10px 0;
  font-size: 30px;
  line-height: 1.2;
  font-weight: 700;
  color: #111827;
}

.dep-test-intro{
  margin: 0;
  font-size: 16px;
  line-height: 1.6;
  color: #4b5563;
}

.dep-test-error{
  display: none;
  margin: 0 0 22px 0;
  padding: 14px 16px;
  border: 1px solid #f3c2c2;
  background: #fff4f4;
  color: #9f1d1d;
  border-radius: 12px;
  font-size: 14px;
  line-height: 1.5;
}

.dep-question{
  margin-bottom: 22px;
  padding: 18px;
  border: 1px solid #e7ecf3;
  border-radius: 16px;
  background: #fbfcfe;
}

.dep-question-title{
  margin: 0 0 14px 0;
  font-size: 17px;
  line-height: 1.5;
  font-weight: 700;
  color: #111827;
}

.dep-answer{
  display: flex;
  align-items: center;
  gap: 10px;
  margin-top: 8px;
  padding: 12px 14px;
  border: 1px solid #dde5ef;
  border-radius: 12px;
  background: #fff;
  cursor: pointer;
  transition: border-color .18s ease, box-shadow .18s ease, background .18s ease;
}

.dep-answer:hover{
  border-color: #bfd0e6;
  background: #f8fbff;
}

.dep-answer input{
  margin: 0;
  flex: 0 0 auto;
}

.dep-answer-text{
  font-size: 15px;
  line-height: 1.45;
  color: #1f2937;
}

.dep-actions{
  margin-top: 24px;
}

.dep-btn{
  display: inline-block;
  width: 100%;
  border: 0;
  border-radius: 14px;
  padding: 15px 18px;
  background: #2563eb;
  color: #fff;
  font-size: 16px;
  font-weight: 700;
  cursor: pointer;
  transition: transform .15s ease, box-shadow .15s ease, background .15s ease;
  box-shadow: 0 10px 22px rgba(37, 99, 235, 0.18);
}

.dep-btn:hover{
  background: #1d4ed8;
}

.dep-btn:focus{
  outline: 3px solid rgba(37, 99, 235, 0.2);
  outline-offset: 2px;
}

.dep-btn:active{
  transform: translateY(1px);
}

.dep-btn-secondary{
  margin-top: 12px;
  background: #e5e7eb;
  color: #1f2937;
  box-shadow: none;
}

.dep-btn-secondary:hover{
  background: #dbe1e8;
}

.dep-result{
  display: none;
  margin-top: 30px;
  padding-top: 10px;
}

.dep-result-hero{
  padding: 24px 20px;
  border-radius: 18px;
  margin-bottom: 18px;
  text-align: center;
  border: 1px solid transparent;
}

.dep-result-hero--low{
  background: #eef6ff;
  border-color: #cfe3ff;
}

.dep-result-hero--mild{
  background: #f4f8ff;
  border-color: #d9e7ff;
}

.dep-result-hero--mid{
  background: #fff7e8;
  border-color: #f4ddb0;
}

.dep-result-hero--high{
  background: #fff0f0;
  border-color: #f1c6c6;
}

.dep-result-title{
  margin: 0;
  font-size: 31px;
  line-height: 1.15;
  font-weight: 800;
  color: #111827;
}

.dep-result-subtitle{
  margin: 12px auto 0 auto;
  max-width: 680px;
  font-size: 17px;
  line-height: 1.6;
  color: #374151;
}

.dep-card{
  margin-bottom: 14px;
  padding: 18px;
  border: 1px solid #e7ecf3;
  border-radius: 16px;
  background: #fff;
}

.dep-card-heading{
  margin: 0 0 10px 0;
  font-size: 15px;
  line-height: 1.3;
  font-weight: 800;
  letter-spacing: .02em;
  text-transform: uppercase;
  color: #475569;
}

.dep-card-text{
  font-size: 15px;
  line-height: 1.7;
  color: #1f2937;
}

.dep-card-text p{
  margin: 0 0 12px 0;
}

.dep-card-text p:last-child{
  margin-bottom: 0;
}

.dep-advice-list{
  margin: 0;
  padding-left: 18px;
}

.dep-advice-list li{
  margin: 0 0 8px 0;
  line-height: 1.6;
}

.dep-links-grid{
  display: grid;
  gap: 10px;
}

.dep-link-card{
  display: block;
  padding: 14px 16px;
  border: 1px solid #dbe5f0;
  border-radius: 14px;
  text-decoration: none;
  background: #f8fbff;
  color: #0f172a;
  font-weight: 700;
  transition: border-color .18s ease, transform .18s ease, background .18s ease;
}

.dep-link-card:hover{
  border-color: #bfd0e6;
  background: #f1f7ff;
  transform: translateY(-1px);
}

.dep-score-meta{
  margin-top: 16px;
  font-size: 18px;
  line-height: 1.4;
  font-weight: 700;
  color: #334155;
  text-align: center;
}

.dep-result-note{
  display: none;
  margin-top: 14px;
  font-size: 14px;
  line-height: 1.6;
  color: #475569;
  text-align: center;
}

.dep-result-hero-media{
  display: none;
  justify-content: center;
  align-items: center;
  margin: 0 0 14px 0;
}

.dep-result-hero-media img{
  display: block;
  max-width: 88px;
  max-height: 88px;
  width: auto;
  height: auto;
}

@media (max-width: 640px){
  .dep-test-wrap{
    padding: 18px;
    border-radius: 14px;
  }

  .dep-test-title{
    font-size: 25px;
  }

  .dep-result-title{
    font-size: 26px;
  }

  .dep-result-subtitle{
    font-size: 16px;
  }

  .dep-question{
    padding: 14px;
  }

  .dep-answer{
    padding: 11px 12px;
  }

  .dep-score-meta{
    font-size: 17px;
  }

  .dep-result-hero-media img{
    max-width: 76px;
    max-height: 76px;
  }
}
</style>

<div class="dep-test-wrap" id="depTestWrap">
  <div class="dep-test-header">
    <h1 class="dep-test-title" id="depTestTitle"></h1>
    <p class="dep-test-intro" id="depTestIntro"></p>
  </div>

  <div class="dep-test-error" id="depTestError"></div>

  <div id="depTestQuestions"></div>

  <div class="dep-actions">
    <button class="dep-btn" id="depTestSubmit" type="button">Ergebnis anzeigen</button>
    <button class="dep-btn dep-btn-secondary" id="depTestReset" type="button">Zurücksetzen</button>
  </div>

  <div class="dep-result" id="depTestResult">
    <div class="dep-result-hero" id="depResultHero">
      <div class="dep-result-hero-media" id="depResultHeroMedia">
        <img decoding="async" id="depResultHeroImage" src="" alt="">
      </div>
      <div class="dep-score-meta" id="depScoreMeta"></div>
      <h3 class="dep-result-title" id="depResultTitle"></h3>
      <div class="dep-result-note" id="depResultNote"></div>
    </div>

```
<div class="dep-card">
  <div class="dep-card-heading">Passende nächste Tests</div>
  <div class="dep-links-grid" id="depLinks"></div>
</div>
```

  </div>
</div>

<script>
const TEST_DATA = {
  title: "Welcher Disney-Bösewicht bist du?",
  intro: "In diesem Test findest du heraus, welcher Disney-Bösewicht am ehesten zu deinem Stil passt.",
  tieBreakOrder: ["maleficent", "ursula", "scar", "hades"],
  resultItems: [
    {
      id: "maleficent",
      badge: "Dein Ergebnis",
      title: "Du bist Maleficent",
      heroStyle: "high",
      links: [
        {
          slug: "welches-pokemon-waerst-du-test",
          title: "Welches Pokémon wärst du?",
          url: "/fun-tests/welches-pokemon-waerst-du-test/"
        },
        {
          slug: "bist-du-rick-oder-morty-test",
          title: "Bist du Rick oder Morty?",
          url: "/fun-tests/bist-du-rick-oder-morty-test/"
        },
        {
          slug: "welche-hunderasse-waerst-du-test",
          title: "Welche Hunderasse wärst du?",
          url: "/fun-tests/welche-hunderasse-waerst-du-test/"
        }
      ]
    },
    {
      id: "ursula",
      badge: "Dein Ergebnis",
      title: "Du bist Ursula",
      heroStyle: "mid",
      links: [
        {
          slug: "welches-pokemon-waerst-du-test",
          title: "Welches Pokémon wärst du?",
          url: "/fun-tests/welches-pokemon-waerst-du-test/"
        },
        {
          slug: "bist-du-rick-oder-morty-test",
          title: "Bist du Rick oder Morty?",
          url: "/fun-tests/bist-du-rick-oder-morty-test/"
        },
        {
          slug: "welche-hunderasse-waerst-du-test",
          title: "Welche Hunderasse wärst du?",
          url: "/fun-tests/welche-hunderasse-waerst-du-test/"
        }
      ]
    },
    {
      id: "scar",
      badge: "Dein Ergebnis",
      title: "Du bist Scar",
      heroStyle: "high",
      links: [
        {
          slug: "welches-pokemon-waerst-du-test",
          title: "Welches Pokémon wärst du?",
          url: "/fun-tests/welches-pokemon-waerst-du-test/"
        },
        {
          slug: "bist-du-rick-oder-morty-test",
          title: "Bist du Rick oder Morty?",
          url: "/fun-tests/bist-du-rick-oder-morty-test/"
        },
        {
          slug: "welche-hunderasse-waerst-du-test",
          title: "Welche Hunderasse wärst du?",
          url: "/fun-tests/welche-hunderasse-waerst-du-test/"
        }
      ]
    },
    {
      id: "hades",
      badge: "Dein Ergebnis",
      title: "Du bist Hades",
      heroStyle: "mild",
      links: [
        {
          slug: "welches-pokemon-waerst-du-test",
          title: "Welches Pokémon wärst du?",
          url: "/fun-tests/welches-pokemon-waerst-du-test/"
        },
        {
          slug: "bist-du-rick-oder-morty-test",
          title: "Bist du Rick oder Morty?",
          url: "/fun-tests/bist-du-rick-oder-morty-test/"
        },
        {
          slug: "welche-hunderasse-waerst-du-test",
          title: "Welche Hunderasse wärst du?",
          url: "/fun-tests/welche-hunderasse-waerst-du-test/"
        }
      ]
    }
  ],
  questions: [
    {
      text: "Du betrittst einen Raum und willst sofort Eindruck machen. Was passt am ehesten zu dir?",
      answers: [
        { text: "Ein ruhiger, majestätischer Auftritt, der sofort Respekt erzeugt.", points: { maleficent: 2, scar: 1 } },
        { text: "Ein charmanter Auftritt mit Witz, Stimme und starker Präsenz.", points: { ursula: 2, hades: 1 } },
        { text: "Ein kühler Blick, der zeigt, dass du die Lage sofort einschätzt.", points: { scar: 2, maleficent: 1 } },
        { text: "Ein lockerer Spruch, der alle kurz irritiert und dann trifft.", points: { hades: 2, ursula: 1 } }
      ]
    },
    {
      text: "Jemand steht dir im Weg. Wie gehst du am liebsten damit um?",
      answers: [
        { text: "Ich setze ein klares Zeichen und lasse keinen Zweifel offen.", points: { maleficent: 2, hades: 1 } },
        { text: "Ich rede die Person so lange geschickt in meine Richtung.", points: { ursula: 2, scar: 1 } },
        { text: "Ich warte auf den richtigen Moment und spiele meinen Vorteil aus.", points: { scar: 2, ursula: 1 } },
        { text: "Ich reagiere schnell, sarkastisch und mit viel Energie.", points: { hades: 2, maleficent: 1 } }
      ]
    },
    {
      text: "Du planst deinen großen Auftritt. Was ist dir dabei am wichtigsten?",
      answers: [
        { text: "Dass alles groß, düster und absolut eindrucksvoll wirkt.", points: { maleficent: 2, ursula: 1 } },
        { text: "Dass ich alle mit Charme, Show und Verführung einwickle.", points: { ursula: 2, maleficent: 1 } },
        { text: "Dass am Ende nur ich den besten Platz bekomme.", points: { scar: 2, hades: 1 } },
        { text: "Dass es knallt, schnell geht und niemand meinen Humor vergisst.", points: { hades: 2, scar: 1 } }
      ]
    },
    {
      text: "Eine andere Person bekommt die Aufmerksamkeit, die du wolltest. Was dann?",
      answers: [
        { text: "Ich merke es mir und komme später stärker zurück.", points: { maleficent: 2, scar: 1 } },
        { text: "Ich ziehe die Bühne wieder zu mir, ganz ohne offen anzugreifen.", points: { ursula: 2, hades: 1 } },
        { text: "Ich gönne es nicht und schmiede sofort einen neuen Plan.", points: { scar: 2, maleficent: 1 } },
        { text: "Ich rege mich kurz auf, mache einen Spruch und handle direkt.", points: { hades: 2, ursula: 1 } }
      ]
    },
    {
      text: "Welche Art von Macht passt am besten zu dir?",
      answers: [
        { text: "Ehrfurcht, Ausstrahlung und das Gefühl, unantastbar zu sein.", points: { maleficent: 2, scar: 1 } },
        { text: "Einfluss über Worte, Deals und geschickte Verlockung.", points: { ursula: 2, hades: 1 } },
        { text: "Kontrolle über Rangordnung, Status und Position.", points: { scar: 2, maleficent: 1 } },
        { text: "Tempo, Energie und ein bisschen kontrolliertes Chaos.", points: { hades: 2, ursula: 1 } }
      ]
    },
    {
      text: "Du bekommst die Chance auf Rache. Wie sähe dein Stil aus?",
      answers: [
        { text: "Elegant, unvergesslich und mit maximaler Wirkung.", points: { maleficent: 2, ursula: 1 } },
        { text: "So, dass die andere Person zuerst gar nicht merkt, was passiert.", points: { ursula: 2, scar: 1 } },
        { text: "Kalt, berechnend und mit klarem persönlichem Vorteil.", points: { scar: 2, maleficent: 1 } },
        { text: "Explosiv, direkt und mit einer guten Portion Drama.", points: { hades: 2, scar: 1 } }
      ]
    },
    {
      text: "In einem Team willst du eher welche Rolle haben?",
      answers: [
        { text: "Die gefürchtete Leitfigur, der man lieber nicht widerspricht.", points: { maleficent: 2, hades: 1 } },
        { text: "Die Stimme im Hintergrund, die alle geschickt lenkt.", points: { ursula: 2, maleficent: 1 } },
        { text: "Der strategische Kopf, der am Ende selbst nach oben will.", points: { scar: 2, ursula: 1 } },
        { text: "Der wilde Motor, der Chaos kontrolliert und antreibt.", points: { hades: 2, scar: 1 } }
      ]
    },
    {
      text: "Jemand unterschätzt dich. Welche Reaktion liegt dir am meisten?",
      answers: [
        { text: "Ich bleibe ruhig und sorge später für einen unvergesslichen Moment.", points: { maleficent: 2, scar: 1 } },
        { text: "Ich lächle und lasse die Person in meine Falle laufen.", points: { ursula: 2, hades: 1 } },
        { text: "Ich nutze den Fehler aus und drehe die Situation zu meinem Vorteil.", points: { scar: 2, ursula: 1 } },
        { text: "Ich kontere sofort, laut und mit viel bissigem Humor.", points: { hades: 2, maleficent: 1 } }
      ]
    },
    {
      text: "Welche Umgebung passt am ehesten zu deiner Energie?",
      answers: [
        { text: "Ein dunkles Schloss, geheimnisvoll und voller Macht.", points: { maleficent: 2, scar: 1 } },
        { text: "Eine glamouröse Bühne, auf der ich alle um den Finger wickeln kann.", points: { ursula: 2, hades: 1 } },
        { text: "Ein Ort, an dem Hierarchien klar sind und man aufsteigen kann.", points: { scar: 2, maleficent: 1 } },
        { text: "Eine heiße, laute Umgebung, in der ständig etwas passiert.", points: { hades: 2, ursula: 1 } }
      ]
    },
    {
      text: "Was beschreibt deinen bösen Stil am besten?",
      answers: [
        { text: "Düster, imposant und fast schon legendär.", points: { maleficent: 2, ursula: 1 } },
        { text: "Theatralisch, clever und verführerisch.", points: { ursula: 2, hades: 1 } },
        { text: "Ehrgeizig, kühl und immer auf den eigenen Vorteil bedacht.", points: { scar: 2, maleficent: 1 } },
        { text: "Feurig, sarkastisch und schwer zu bremsen.", points: { hades: 2, scar: 1 } }
      ]
    }
  ]
};

(function () {
  "use strict";

  if (typeof TEST_DATA === "undefined") {
    const errorBox = document.getElementById("depTestError");
    errorBox.style.display = "block";
    errorBox.textContent = "Fehler: TEST_DATA wurde nicht gefunden. Die Engine braucht gültige Testdaten.";
    return;
  }

  const REQUIRED_TOP_LEVEL_FIELDS = ["title", "intro", "questions", "resultItems", "tieBreakOrder"];
  const REQUIRED_RESULT_FIELDS = ["id", "badge", "title", "links", "heroStyle"];
  const REQUIRED_LINK_FIELDS = ["slug", "title", "url"];
  const REQUIRED_QUESTION_FIELDS = ["text", "answers"];
  const REQUIRED_ANSWER_FIELDS = ["text", "points"];
  const ALLOWED_HERO_STYLES = ["low", "mild", "mid", "high"];

  const el = {
    wrap: document.getElementById("depTestWrap"),
    title: document.getElementById("depTestTitle"),
    intro: document.getElementById("depTestIntro"),
    error: document.getElementById("depTestError"),
    questions: document.getElementById("depTestQuestions"),
    submit: document.getElementById("depTestSubmit"),
    reset: document.getElementById("depTestReset"),
    result: document.getElementById("depTestResult"),
    resultHero: document.getElementById("depResultHero"),
    resultHeroMedia: document.getElementById("depResultHeroMedia"),
    resultHeroImage: document.getElementById("depResultHeroImage"),
    resultTitle: document.getElementById("depResultTitle"),
    scoreMeta: document.getElementById("depScoreMeta"),
    resultNote: document.getElementById("depResultNote"),
    links: document.getElementById("depLinks")
  };

  function showError(message) {
    el.error.style.display = "block";
    el.error.textContent = message;
  }

  function clearError() {
    el.error.style.display = "none";
    el.error.textContent = "";
  }

  function escapeHtml(str) {
    return String(str)
      .replace(/&/g, "&amp;")
      .replace(/</g, "&lt;")
      .replace(/>/g, "&gt;")
      .replace(/"/g, "&quot;")
      .replace(/'/g, "&#039;");
  }

  function isNonEmptyString(value) {
    return typeof value === "string" && value.trim() !== "";
  }

  function nl2p(text) {
    return String(text)
      .split(/\n{2,}/)
      .map(part => "<p>" + escapeHtml(part).replace(/\n/g, "<br>") + "</p>")
      .join("");
  }

  function endsWithSlug(url, slug) {
    const cleanUrl = String(url).replace(/\/+$/, "");
    const cleanSlug = String(slug).replace(/^\/+|\/+$/g, "");
    return cleanUrl.endsWith("/" + cleanSlug);
  }

  function validateTopLevelFields(data) {
    for (const key of REQUIRED_TOP_LEVEL_FIELDS) {
      if (!(key in data)) {
        return "Fehler: In TEST_DATA fehlt das Pflichtfeld '" + key + "'.";
      }
    }

    if (!isNonEmptyString(data.title)) {
      return "Fehler: TEST_DATA.title ist leer oder ungültig.";
    }

    if (!isNonEmptyString(data.intro)) {
      return "Fehler: TEST_DATA.intro ist leer oder ungültig.";
    }

    if (!Array.isArray(data.resultItems) || data.resultItems.length < 2) {
      return "Fehler: TEST_DATA.resultItems muss mindestens 2 konkrete Ergebnisse enthalten.";
    }

    if (!Array.isArray(data.tieBreakOrder) || data.tieBreakOrder.length !== data.resultItems.length) {
      return "Fehler: TEST_DATA.tieBreakOrder muss alle Ergebnis-IDs genau einmal enthalten.";
    }

    if (!Array.isArray(data.questions) || data.questions.length !== 10) {
      return "Fehler: TEST_DATA.questions muss genau 10 Fragen enthalten.";
    }

    return null;
  }

  function validateResultItems(data) {
    const seenIds = new Set();

    for (let i = 0; i < data.resultItems.length; i++) {
      const result = data.resultItems[i];

      if (!result || typeof result !== "object" || Array.isArray(result)) {
        return "Fehler: TEST_DATA.resultItems[" + i + "] ist ungültig.";
      }

      for (const field of REQUIRED_RESULT_FIELDS) {
        if (!(field in result)) {
          return "Fehler: In TEST_DATA.resultItems[" + i + "] fehlt das Feld '" + field + "'.";
        }
      }

      if (!isNonEmptyString(result.id)) {
        return "Fehler: TEST_DATA.resultItems[" + i + "].id ist leer oder ungültig.";
      }

      if (seenIds.has(result.id)) {
        return "Fehler: Die Ergebnis-ID '" + result.id + "' ist doppelt vorhanden.";
      }

      if (!isNonEmptyString(result.badge)) {
        return "Fehler: TEST_DATA.resultItems[" + i + "].badge ist leer oder ungültig.";
      }

      if (!isNonEmptyString(result.title)) {
        return "Fehler: TEST_DATA.resultItems[" + i + "].title ist leer oder ungültig.";
      }

      if (!Array.isArray(result.links) || result.links.length < 2 || result.links.length > 3) {
        return "Fehler: TEST_DATA.resultItems[" + i + "].links muss 2 bis 3 weiterführende Tests enthalten.";
      }

      if (!isNonEmptyString(result.heroStyle) || !ALLOWED_HERO_STYLES.includes(result.heroStyle)) {
        return "Fehler: TEST_DATA.resultItems[" + i + "].heroStyle ist ungültig. Erlaubt sind: low, mild, mid, high.";
      }

      if ("image" in result && result.image !== null && !isNonEmptyString(result.image)) {
        return "Fehler: TEST_DATA.resultItems[" + i + "].image ist ungültig.";
      }

      if ("imageAlt" in result && result.imageAlt !== null && !isNonEmptyString(result.imageAlt)) {
        return "Fehler: TEST_DATA.resultItems[" + i + "].imageAlt ist ungültig.";
      }

      const seenSlugs = new Set();

      for (let j = 0; j < result.links.length; j++) {
        const link = result.links[j];

        if (!link || typeof link !== "object" || Array.isArray(link)) {
          return "Fehler: Ein Link in TEST_DATA.resultItems[" + i + "].links ist ungültig.";
        }

        for (const field of REQUIRED_LINK_FIELDS) {
          if (!(field in link)) {
            return "Fehler: In TEST_DATA.resultItems[" + i + "].links[" + j + "] fehlt das Feld '" + field + "'.";
          }
        }

        if (!isNonEmptyString(link.slug)) {
          return "Fehler: Ein Link in TEST_DATA.resultItems[" + i + "].links hat keinen gültigen Slug.";
        }

        if (!isNonEmptyString(link.title)) {
          return "Fehler: Ein Link in TEST_DATA.resultItems[" + i + "].links hat keinen gültigen Titel.";
        }

        if (!isNonEmptyString(link.url)) {
          return "Fehler: Ein Link in TEST_DATA.resultItems[" + i + "].links hat keine gültige URL.";
        }

        if (seenSlugs.has(link.slug)) {
          return "Fehler: In TEST_DATA.resultItems[" + i + "] gibt es doppelte Links mit dem Slug '" + link.slug + "'.";
        }

        if (!endsWithSlug(link.url, link.slug)) {
          return "Fehler: In TEST_DATA.resultItems[" + i + "] passt die URL nicht zum Slug '" + link.slug + "'.";
        }

        seenSlugs.add(link.slug);
      }

      seenIds.add(result.id);
    }

    return null;
  }

  function validateTieBreakOrder(data) {
    const resultIds = data.resultItems.map(item => item.id).sort();
    const tieBreakIds = data.tieBreakOrder.slice().sort();

    if (JSON.stringify(resultIds) !== JSON.stringify(tieBreakIds)) {
      return "Fehler: TEST_DATA.tieBreakOrder passt nicht exakt zu den IDs aus TEST_DATA.resultItems.";
    }

    return null;
  }

  function validateQuestions(data) {
    const validResultIds = new Set(data.resultItems.map(item => item.id));
    const reachableResultIds = new Set();

    for (let i = 0; i < data.questions.length; i++) {
      const question = data.questions[i];

      if (!question || typeof question !== "object" || Array.isArray(question)) {
        return "Fehler: Frage " + (i + 1) + " ist ungültig.";
      }

      for (const field of REQUIRED_QUESTION_FIELDS) {
        if (!(field in question)) {
          return "Fehler: In Frage " + (i + 1) + " fehlt das Feld '" + field + "'.";
        }
      }

      if (!isNonEmptyString(question.text)) {
        return "Fehler: Frage " + (i + 1) + " hat keinen gültigen Text.";
      }

      if (!Array.isArray(question.answers) || question.answers.length !== 4) {
        return "Fehler: Frage " + (i + 1) + " muss genau 4 Antworten haben.";
      }

      for (let j = 0; j < question.answers.length; j++) {
        const answer = question.answers[j];

        if (!answer || typeof answer !== "object" || Array.isArray(answer)) {
          return "Fehler: Frage " + (i + 1) + ", Antwort " + (j + 1) + " ist ungültig.";
        }

        for (const field of REQUIRED_ANSWER_FIELDS) {
          if (!(field in answer)) {
            return "Fehler: In Frage " + (i + 1) + ", Antwort " + (j + 1) + " fehlt das Feld '" + field + "'.";
          }
        }

        if (!isNonEmptyString(answer.text)) {
          return "Fehler: Frage " + (i + 1) + ", Antwort " + (j + 1) + " hat keinen gültigen Text.";
        }

        if (typeof answer.points !== "object" || answer.points === null || Array.isArray(answer.points)) {
          return "Fehler: Frage " + (i + 1) + ", Antwort " + (j + 1) + " braucht ein gültiges points-Objekt.";
        }

        const pointKeys = Object.keys(answer.points);

        if (pointKeys.length === 0) {
          return "Fehler: Frage " + (i + 1) + ", Antwort " + (j + 1) + " muss mindestens einem Ergebnis Punkte geben.";
        }

        for (const resultId of pointKeys) {
          if (!validResultIds.has(resultId)) {
            return "Fehler: Frage " + (i + 1) + ", Antwort " + (j + 1) + " verweist auf die unbekannte Ergebnis-ID '" + resultId + "'.";
          }

          const value = answer.points[resultId];

          if (!Number.isInteger(value) || value < 0) {
            return "Fehler: Frage " + (i + 1) + ", Antwort " + (j + 1) + " hat bei '" + resultId + "' keinen gültigen Punktwert.";
          }

          if (value > 0) {
            reachableResultIds.add(resultId);
          }
        }
      }
    }

    const unreachableIds = data.resultItems
      .map(item => item.id)
      .filter(id => !reachableResultIds.has(id));

    if (unreachableIds.length > 0) {
      return "Fehler: Diese Ergebnisse sind über keine Antwort erreichbar: " + unreachableIds.join(", ") + ".";
    }

    return null;
  }

  function validateTestData(data) {
    const topLevelError = validateTopLevelFields(data);
    if (topLevelError) {
      return topLevelError;
    }

    const resultItemsError = validateResultItems(data);
    if (resultItemsError) {
      return resultItemsError;
    }

    const tieBreakError = validateTieBreakOrder(data);
    if (tieBreakError) {
      return tieBreakError;
    }

    const questionsError = validateQuestions(data);
    if (questionsError) {
      return questionsError;
    }

    return null;
  }

  function renderQuestions(data, userAnswers) {
    let html = "";

    data.questions.forEach((question, qIndex) => {
      html += `
        <div class="dep-question">
          <div class="dep-question-title">${qIndex + 1}. ${escapeHtml(question.text)}</div>
      `;

      question.answers.forEach((answer, aIndex) => {
        const inputId = `depQ${qIndex}A${aIndex}`;

        html += `
          <label class="dep-answer" for="${inputId}">
            <input
              type="radio"
              id="${inputId}"
              name="depQ${qIndex}"
              value="${aIndex}"
              ${userAnswers[qIndex] === aIndex ? "checked" : ""}
            >
            <span class="dep-answer-text">${escapeHtml(answer.text)}</span>
          </label>
        `;
      });

      html += `</div>`;
    });

    el.questions.innerHTML = html;
  }

  function bindAnswerEvents(userAnswers) {
    const radioInputs = el.questions.querySelectorAll('input[type="radio"]');

    radioInputs.forEach(input => {
      input.addEventListener("change", function () {
        const qIndex = Number(this.name.replace("depQ", ""));
        userAnswers[qIndex] = Number(this.value);
        clearError();
      });
    });
  }

  function renderTraitsList(items) {
    const lis = items.map(item => "<li>" + escapeHtml(item) + "</li>").join("");
    return '<ul class="dep-advice-list">' + lis + "</ul>";
  }

  function renderLinks(links) {
    return links.map(link => {
      return `
        <a class="dep-link-card" href="${escapeHtml(link.url)}" data-slug="${escapeHtml(link.slug)}">
          ${escapeHtml(link.title)}
        </a>
      `;
    }).join("");
  }

  function buildResultScores(data, userAnswers) {
    const scores = {};

    data.resultItems.forEach(item => {
      scores[item.id] = 0;
    });

    data.questions.forEach((question, qIndex) => {
      const selectedAnswerIndex = userAnswers[qIndex];
      const selectedAnswer = question.answers[selectedAnswerIndex];

      Object.keys(selectedAnswer.points).forEach(resultId => {
        scores[resultId] += selectedAnswer.points[resultId];
      });
    });

    return scores;
  }

  function getWinningResultId(scores, tieBreakOrder) {
    const maxScore = Math.max.apply(null, Object.values(scores));
    const candidates = Object.keys(scores).filter(resultId => scores[resultId] === maxScore);

    if (candidates.length === 1) {
      return candidates[0];
    }

    for (const resultId of tieBreakOrder) {
      if (candidates.includes(resultId)) {
        return resultId;
      }
    }

    return tieBreakOrder[0];
  }

  function getResultById(data, resultId) {
    return data.resultItems.find(item => item.id === resultId) || null;
  }

  function getHeroClassByStyle(heroStyle) {
    if (heroStyle === "low") return "dep-result-hero dep-result-hero--low";
    if (heroStyle === "mild") return "dep-result-hero dep-result-hero--mild";
    if (heroStyle === "mid") return "dep-result-hero dep-result-hero--mid";
    return "dep-result-hero dep-result-hero--high";
  }

  function resetHeroMedia() {
    el.resultHeroMedia.style.display = "none";
    el.resultHeroImage.removeAttribute("src");
    el.resultHeroImage.setAttribute("alt", "");
  }

  function renderHeroMedia(resultData) {
    if (isNonEmptyString(resultData.image)) {
      el.resultHeroImage.src = resultData.image;
      el.resultHeroImage.alt = isNonEmptyString(resultData.imageAlt) ? resultData.imageAlt : resultData.title;
      el.resultHeroMedia.style.display = "flex";
      return;
    }

    resetHeroMedia();
  }

  function resetTest(userAnswers) {
    for (let i = 0; i < userAnswers.length; i++) {
      userAnswers[i] = undefined;
    }

    const radioInputs = el.questions.querySelectorAll('input[type="radio"]');
    radioInputs.forEach(input => {
      input.checked = false;
    });

    clearError();
    el.result.style.display = "none";
    el.resultHero.className = "dep-result-hero";
    el.scoreMeta.textContent = "";
    el.scoreMeta.style.display = "none";
    el.resultNote.textContent = "";
    el.resultNote.style.display = "none";
    el.resultTitle.textContent = "";
    el.links.innerHTML = "";
    resetHeroMedia();
    el.wrap.scrollIntoView({ behavior: "smooth", block: "start" });
  }

  function renderResult(resultData) {
    el.resultHero.className = getHeroClassByStyle(resultData.heroStyle);
    renderHeroMedia(resultData);
    el.resultTitle.textContent = resultData.title;
    el.scoreMeta.textContent = resultData.badge;
    el.scoreMeta.style.display = "block";
    el.resultNote.textContent = "";
    el.resultNote.style.display = "none";
    el.links.innerHTML = renderLinks(resultData.links);

    el.result.style.display = "block";
    el.result.scrollIntoView({ behavior: "smooth", block: "start" });
  }

  function init() {
    const validationError = validateTestData(TEST_DATA);

    if (validationError) {
      showError(validationError);
      return;
    }

    clearError();

    el.title.textContent = TEST_DATA.title;
    el.intro.textContent = TEST_DATA.intro;
    el.scoreMeta.style.display = "none";
    el.resultNote.style.display = "none";
    resetHeroMedia();

    const userAnswers = new Array(TEST_DATA.questions.length).fill(undefined);

    renderQuestions(TEST_DATA, userAnswers);
    bindAnswerEvents(userAnswers);

    el.submit.addEventListener("click", function () {
      const unanswered = userAnswers
        .map((value, index) => value === undefined ? index + 1 : null)
        .filter(Boolean);

      if (unanswered.length > 0) {
        el.result.style.display = "none";
        showError("Bitte beantworte alle Fragen. Offen: " + unanswered.join(", "));
        el.error.scrollIntoView({ behavior: "smooth", block: "center" });
        return;
      }

      clearError();

      const scores = buildResultScores(TEST_DATA, userAnswers);
      const winningResultId = getWinningResultId(scores, TEST_DATA.tieBreakOrder);
      const resultData = getResultById(TEST_DATA, winningResultId);

      if (!resultData) {
        showError("Fehler: Das Ergebnis konnte nicht berechnet werden.");
        return;
      }

      renderResult(resultData);
    });

    el.reset.addEventListener("click", function () {
      resetTest(userAnswers);
    });
  }

  init();
})();
</script>
				</div>
					</div>
				</div>
				</div>
		]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Welcher Hund bist du?</title>
		<link>https://checkdich.at/category-fun/welche-hunderasse-waerst-du-test/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Fri, 01 May 2026 18:01:21 +0000</pubDate>
				<category><![CDATA[Fun Tests]]></category>
		<guid isPermaLink="false">https://checkdich.at/?p=1736</guid>

					<description><![CDATA[Ergebnis anzeigen Zurücksetzen &#8222;` Passende nächste Tests &#8222;`]]></description>
			<style id="elementor-post-1736">.elementor-1736 .elementor-element.elementor-element-b0681ca{--display:flex;--flex-direction:column;--container-widget-width:100%;--container-widget-height:initial;--container-widget-flex-grow:0;--container-widget-align-self:initial;--flex-wrap-mobile:wrap;}</style>							<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="1736" class="elementor elementor-1736" data-elementor-post-type="post">
				<div class="elementor-element elementor-element-b0681ca e-flex e-con-boxed e-con e-parent" data-id="b0681ca" data-element_type="container" data-e-type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-23ae3da elementor-widget elementor-widget-html" data-id="23ae3da" data-element_type="widget" data-e-type="widget" data-widget_type="html.default">
					<style>
.dep-test-wrap{
  max-width: 860px;
  margin: 32px auto;
  padding: 24px;
  background: #fff;
  border: 1px solid #e7ecf3;
  border-radius: 18px;
  box-shadow: 0 8px 24px rgba(15, 23, 42, 0.06);
  font-family: Arial, sans-serif;
  color: #1f2937;
}

.dep-test-header{
  margin-bottom: 24px;
}

.dep-test-title{
  margin: 0 0 10px 0;
  font-size: 30px;
  line-height: 1.2;
  font-weight: 700;
  color: #111827;
}

.dep-test-intro{
  margin: 0;
  font-size: 16px;
  line-height: 1.6;
  color: #4b5563;
}

.dep-test-error{
  display: none;
  margin: 0 0 22px 0;
  padding: 14px 16px;
  border: 1px solid #f3c2c2;
  background: #fff4f4;
  color: #9f1d1d;
  border-radius: 12px;
  font-size: 14px;
  line-height: 1.5;
}

.dep-question{
  margin-bottom: 22px;
  padding: 18px;
  border: 1px solid #e7ecf3;
  border-radius: 16px;
  background: #fbfcfe;
}

.dep-question-title{
  margin: 0 0 14px 0;
  font-size: 17px;
  line-height: 1.5;
  font-weight: 700;
  color: #111827;
}

.dep-answer{
  display: flex;
  align-items: center;
  gap: 10px;
  margin-top: 8px;
  padding: 12px 14px;
  border: 1px solid #dde5ef;
  border-radius: 12px;
  background: #fff;
  cursor: pointer;
  transition: border-color .18s ease, box-shadow .18s ease, background .18s ease;
}

.dep-answer:hover{
  border-color: #bfd0e6;
  background: #f8fbff;
}

.dep-answer input{
  margin: 0;
  flex: 0 0 auto;
}

.dep-answer-text{
  font-size: 15px;
  line-height: 1.45;
  color: #1f2937;
}

.dep-actions{
  margin-top: 24px;
}

.dep-btn{
  display: inline-block;
  width: 100%;
  border: 0;
  border-radius: 14px;
  padding: 15px 18px;
  background: #2563eb;
  color: #fff;
  font-size: 16px;
  font-weight: 700;
  cursor: pointer;
  transition: transform .15s ease, box-shadow .15s ease, background .15s ease;
  box-shadow: 0 10px 22px rgba(37, 99, 235, 0.18);
}

.dep-btn:hover{
  background: #1d4ed8;
}

.dep-btn:focus{
  outline: 3px solid rgba(37, 99, 235, 0.2);
  outline-offset: 2px;
}

.dep-btn:active{
  transform: translateY(1px);
}

.dep-btn-secondary{
  margin-top: 12px;
  background: #e5e7eb;
  color: #1f2937;
  box-shadow: none;
}

.dep-btn-secondary:hover{
  background: #dbe1e8;
}

.dep-result{
  display: none;
  margin-top: 30px;
  padding-top: 10px;
}

.dep-result-hero{
  padding: 24px 20px;
  border-radius: 18px;
  margin-bottom: 18px;
  text-align: center;
  border: 1px solid transparent;
}

.dep-result-hero--low{
  background: #eef6ff;
  border-color: #cfe3ff;
}

.dep-result-hero--mild{
  background: #f4f8ff;
  border-color: #d9e7ff;
}

.dep-result-hero--mid{
  background: #fff7e8;
  border-color: #f4ddb0;
}

.dep-result-hero--high{
  background: #fff0f0;
  border-color: #f1c6c6;
}

.dep-result-title{
  margin: 0;
  font-size: 31px;
  line-height: 1.15;
  font-weight: 800;
  color: #111827;
}

.dep-result-subtitle{
  margin: 12px auto 0 auto;
  max-width: 680px;
  font-size: 17px;
  line-height: 1.6;
  color: #374151;
}

.dep-card{
  margin-bottom: 14px;
  padding: 18px;
  border: 1px solid #e7ecf3;
  border-radius: 16px;
  background: #fff;
}

.dep-card-heading{
  margin: 0 0 10px 0;
  font-size: 15px;
  line-height: 1.3;
  font-weight: 800;
  letter-spacing: .02em;
  text-transform: uppercase;
  color: #475569;
}

.dep-card-text{
  font-size: 15px;
  line-height: 1.7;
  color: #1f2937;
}

.dep-card-text p{
  margin: 0 0 12px 0;
}

.dep-card-text p:last-child{
  margin-bottom: 0;
}

.dep-advice-list{
  margin: 0;
  padding-left: 18px;
}

.dep-advice-list li{
  margin: 0 0 8px 0;
  line-height: 1.6;
}

.dep-links-grid{
  display: grid;
  gap: 10px;
}

.dep-link-card{
  display: block;
  padding: 14px 16px;
  border: 1px solid #dbe5f0;
  border-radius: 14px;
  text-decoration: none;
  background: #f8fbff;
  color: #0f172a;
  font-weight: 700;
  transition: border-color .18s ease, transform .18s ease, background .18s ease;
}

.dep-link-card:hover{
  border-color: #bfd0e6;
  background: #f1f7ff;
  transform: translateY(-1px);
}

.dep-score-meta{
  margin-top: 16px;
  font-size: 18px;
  line-height: 1.4;
  font-weight: 700;
  color: #334155;
  text-align: center;
}

.dep-result-note{
  display: none;
  margin-top: 14px;
  font-size: 14px;
  line-height: 1.6;
  color: #475569;
  text-align: center;
}

.dep-result-hero-media{
  display: none;
  justify-content: center;
  align-items: center;
  margin: 0 0 14px 0;
}

.dep-result-hero-media img{
  display: block;
  max-width: 88px;
  max-height: 88px;
  width: auto;
  height: auto;
}

@media (max-width: 640px){
  .dep-test-wrap{
    padding: 18px;
    border-radius: 14px;
  }

  .dep-test-title{
    font-size: 25px;
  }

  .dep-result-title{
    font-size: 26px;
  }

  .dep-result-subtitle{
    font-size: 16px;
  }

  .dep-question{
    padding: 14px;
  }

  .dep-answer{
    padding: 11px 12px;
  }

  .dep-score-meta{
    font-size: 17px;
  }

  .dep-result-hero-media img{
    max-width: 76px;
    max-height: 76px;
  }
}
</style>

<div class="dep-test-wrap" id="depTestWrap">
  <div class="dep-test-header">
    <h1 class="dep-test-title" id="depTestTitle"></h1>
    <p class="dep-test-intro" id="depTestIntro"></p>
  </div>

  <div class="dep-test-error" id="depTestError"></div>

  <div id="depTestQuestions"></div>

  <div class="dep-actions">
    <button class="dep-btn" id="depTestSubmit" type="button">Ergebnis anzeigen</button>
    <button class="dep-btn dep-btn-secondary" id="depTestReset" type="button">Zurücksetzen</button>
  </div>

  <div class="dep-result" id="depTestResult">
    <div class="dep-result-hero" id="depResultHero">
      <div class="dep-result-hero-media" id="depResultHeroMedia">
        <img decoding="async" id="depResultHeroImage" src="" alt="">
      </div>
      <div class="dep-score-meta" id="depScoreMeta"></div>      
      <h3 class="dep-result-title" id="depResultTitle"></h3>
      <div class="dep-result-note" id="depResultNote"></div>
    </div>

```
<div class="dep-card">
  <div class="dep-card-heading">Passende nächste Tests</div>
  <div class="dep-links-grid" id="depLinks"></div>
</div>
```

  </div>
</div>

<script>
const TEST_DATA = {
  title: "Welcher Hund bist du?",
  intro: "In diesem Test findest du heraus, welcher Hund am besten zu deiner Art passt. Beantworte 10 spielerische Alltagssituationen und am Ende bekommst du einen konkreten Hundetyp als Ergebnis.",
  tieBreakOrder: [
    "golden-retriever",
    "husky",
    "bulldogge",
    "border-collie"
  ],
  resultItems: [
    {
      id: "golden-retriever",
      badge: "Dein Ergebnis",
      title: "Du bist ein Golden Retriever",
      heroStyle: "mild",
      links: [
        {
          slug: "welches-pokemon-waerst-du-test",
          title: "Welches Pokémon wärst du?",
          url: "/fun-tests/welches-pokemon-waerst-du-test"
        },
        {
          slug: "bist-du-rick-oder-morty-test",
          title: "Bist du Rick oder Morty?",
          url: "/fun-tests/bist-du-rick-oder-morty-test"
        },
        {
          slug: "welche-hunderasse-waerst-du-test",
          title: "Welche Hunderasse wärst du?",
          url: "/fun-tests/welche-hunderasse-waerst-du-test"
        }
      ]
    },
    {
      id: "husky",
      badge: "Dein Ergebnis",
      title: "Du bist ein Husky",
      heroStyle: "high",
      links: [
        {
          slug: "welches-pokemon-waerst-du-test",
          title: "Welches Pokémon wärst du?",
          url: "/fun-tests/welches-pokemon-waerst-du-test"
        },
        {
          slug: "bist-du-rick-oder-morty-test",
          title: "Bist du Rick oder Morty?",
          url: "/fun-tests/bist-du-rick-oder-morty-test"
        },
        {
          slug: "welche-hunderasse-waerst-du-test",
          title: "Welche Hunderasse wärst du?",
          url: "/fun-tests/welche-hunderasse-waerst-du-test"
        }
      ]
    },
    {
      id: "bulldogge",
      badge: "Dein Ergebnis",
      title: "Du bist eine Bulldogge",
      heroStyle: "mid",
      links: [
        {
          slug: "welches-pokemon-waerst-du-test",
          title: "Welches Pokémon wärst du?",
          url: "/fun-tests/welches-pokemon-waerst-du-test"
        },
        {
          slug: "bist-du-rick-oder-morty-test",
          title: "Bist du Rick oder Morty?",
          url: "/fun-tests/bist-du-rick-oder-morty-test"
        },
        {
          slug: "welche-hunderasse-waerst-du-test",
          title: "Welche Hunderasse wärst du?",
          url: "/fun-tests/welche-hunderasse-waerst-du-test"
        }
      ]
    },
    {
      id: "border-collie",
      badge: "Dein Ergebnis",
      title: "Du bist ein Border Collie",
      heroStyle: "low",
      links: [
        {
          slug: "welches-pokemon-waerst-du-test",
          title: "Welches Pokémon wärst du?",
          url: "/fun-tests/welches-pokemon-waerst-du-test"
        },
        {
          slug: "bist-du-rick-oder-morty-test",
          title: "Bist du Rick oder Morty?",
          url: "/fun-tests/bist-du-rick-oder-morty-test"
        },
        {
          slug: "welche-hunderasse-waerst-du-test",
          title: "Welche Hunderasse wärst du?",
          url: "/fun-tests/welche-hunderasse-waerst-du-test"
        }
      ]
    }
  ],
  questions: [
    {
      text: "Du kommst auf eine Party, auf der du nur wenige Leute kennst. Was machst du zuerst?",
      answers: [
        {
          text: "Ich gehe freundlich auf die Leute zu und komme schnell ins Gespräch.",
          points: { "golden-retriever": 2, "husky": 1 }
        },
        {
          text: "Ich schaue mir alles kurz an und suche mir dann meinen eigenen Platz.",
          points: { "husky": 2, "border-collie": 1 }
        },
        {
          text: "Ich bleibe erstmal bei den Leuten, mit denen ich gekommen bin.",
          points: { "bulldogge": 2, "golden-retriever": 1 }
        },
        {
          text: "Ich checke sofort, wer wo steht, was los ist und wie der Abend läuft.",
          points: { "border-collie": 2, "bulldogge": 1 }
        }
      ]
    },
    {
      text: "Ein spontaner Wochenendplan kommt auf. Wie reagierst du?",
      answers: [
        {
          text: "Ich bin dabei, wenn es nach Spaß und guter Stimmung klingt.",
          points: { "golden-retriever": 2, "husky": 1 }
        },
        {
          text: "Ich will sofort los, Hauptsache raus aus dem Alltag.",
          points: { "husky": 2, "golden-retriever": 1 }
        },
        {
          text: "Ich brauche nicht viel Action, ein gemütlicher Plan reicht mir.",
          points: { "bulldogge": 2, "border-collie": 1 }
        },
        {
          text: "Ich überlege zuerst, ob der Plan sinnvoll organisiert ist.",
          points: { "border-collie": 2, "bulldogge": 1 }
        }
      ]
    },
    {
      text: "In einer Gruppe muss schnell entschieden werden, was ihr macht. Welche Rolle passt am ehesten zu dir?",
      answers: [
        {
          text: "Ich achte darauf, dass sich alle wohlfühlen.",
          points: { "golden-retriever": 2, "bulldogge": 1 }
        },
        {
          text: "Ich werfe eine mutige Idee in den Raum und will Bewegung reinbringen.",
          points: { "husky": 2, "golden-retriever": 1 }
        },
        {
          text: "Ich sage klar, was ich nicht will, und bleibe dabei.",
          points: { "bulldogge": 2, "husky": 1 }
        },
        {
          text: "Ich sortiere die Optionen und finde schnell die praktischste Lösung.",
          points: { "border-collie": 2, "bulldogge": 1 }
        }
      ]
    },
    {
      text: "Du hast einen freien Nachmittag. Was klingt für dich am besten?",
      answers: [
        {
          text: "Zeit mit Menschen verbringen, die ich gernhabe.",
          points: { "golden-retriever": 2, "border-collie": 1 }
        },
        {
          text: "Etwas draußen machen, am besten mit Bewegung und Abwechslung.",
          points: { "husky": 2, "golden-retriever": 1 }
        },
        {
          text: "Gemütlich essen, entspannen und möglichst wenig Stress haben.",
          points: { "bulldogge": 2, "husky": 1 }
        },
        {
          text: "Etwas erledigen, planen oder an einem Projekt weiterarbeiten.",
          points: { "border-collie": 2, "bulldogge": 1 }
        }
      ]
    },
    {
      text: "Jemand bittet dich um Hilfe bei einer etwas chaotischen Aufgabe. Was tust du?",
      answers: [
        {
          text: "Ich helfe direkt und versuche, die Stimmung locker zu halten.",
          points: { "golden-retriever": 2, "bulldogge": 1 }
        },
        {
          text: "Ich packe mit an, aber mache es auf meine eigene Art.",
          points: { "husky": 2, "border-collie": 1 }
        },
        {
          text: "Ich helfe, solange es nicht unnötig kompliziert wird.",
          points: { "bulldogge": 2, "golden-retriever": 1 }
        },
        {
          text: "Ich bringe zuerst Struktur rein, damit es schneller fertig wird.",
          points: { "border-collie": 2, "husky": 1 }
        }
      ]
    },
    {
      text: "Beim Spielen oder Wetteifern verlierst du knapp. Wie reagierst du?",
      answers: [
        {
          text: "Ich nehme es locker und freue mich trotzdem über den Spaß.",
          points: { "golden-retriever": 2, "bulldogge": 1 }
        },
        {
          text: "Ich will sofort eine Revanche.",
          points: { "husky": 2, "border-collie": 1 }
        },
        {
          text: "Ich tue so, als wäre es mir egal, auch wenn es mich kurz nervt.",
          points: { "bulldogge": 2, "husky": 1 }
        },
        {
          text: "Ich analysiere, was ich beim nächsten Mal besser machen kann.",
          points: { "border-collie": 2, "golden-retriever": 1 }
        }
      ]
    },
    {
      text: "Du bist mit Freunden unterwegs und der Plan ändert sich plötzlich. Was passt am ehesten?",
      answers: [
        {
          text: "Solange alle gut drauf sind, gehe ich flexibel mit.",
          points: { "golden-retriever": 2, "husky": 1 }
        },
        {
          text: "Gut so, Abwechslung macht es interessanter.",
          points: { "husky": 2, "golden-retriever": 1 }
        },
        {
          text: "Ich finde spontane Änderungen eher mühsam, wenn der alte Plan gut war.",
          points: { "bulldogge": 2, "border-collie": 1 }
        },
        {
          text: "Ich will kurz wissen, wie der neue Ablauf konkret aussieht.",
          points: { "border-collie": 2, "bulldogge": 1 }
        }
      ]
    },
    {
      text: "Du bekommst eine neue Aufgabe, die du noch nie gemacht hast. Wie gehst du ran?",
      answers: [
        {
          text: "Ich frage andere, probiere es aus und bleibe positiv.",
          points: { "golden-retriever": 2, "border-collie": 1 }
        },
        {
          text: "Ich starte einfach und finde unterwegs heraus, wie es geht.",
          points: { "husky": 2, "golden-retriever": 1 }
        },
        {
          text: "Ich mache es nur, wenn mir klar ist, dass es wirklich nötig ist.",
          points: { "bulldogge": 2, "husky": 1 }
        },
        {
          text: "Ich informiere mich zuerst und arbeite dann Schritt für Schritt.",
          points: { "border-collie": 2, "bulldogge": 1 }
        }
      ]
    },
    {
      text: "In deinem Freundeskreis gibt es schlechte Stimmung. Was machst du?",
      answers: [
        {
          text: "Ich versuche, alle wieder zusammenzubringen.",
          points: { "golden-retriever": 2, "bulldogge": 1 }
        },
        {
          text: "Ich sage direkt, was ich denke, auch wenn es unbequem ist.",
          points: { "husky": 2, "border-collie": 1 }
        },
        {
          text: "Ich halte mich raus, wenn es nicht mein Problem ist.",
          points: { "bulldogge": 2, "husky": 1 }
        },
        {
          text: "Ich versuche zu verstehen, wo genau das Problem liegt.",
          points: { "border-collie": 2, "golden-retriever": 1 }
        }
      ]
    },
    {
      text: "Was beschreibt deinen idealen Alltag am besten?",
      answers: [
        {
          text: "Viel Nähe, gute Gespräche und Menschen, auf die ich mich freue.",
          points: { "golden-retriever": 2, "bulldogge": 1 }
        },
        {
          text: "Bewegung, Freiheit und bloß nicht jeden Tag dasselbe.",
          points: { "husky": 2, "golden-retriever": 1 }
        },
        {
          text: "Ein ruhiger Rhythmus, gutes Essen und möglichst wenig unnötiger Stress.",
          points: { "bulldogge": 2, "border-collie": 1 }
        },
        {
          text: "Klare Ziele, sinnvolle Aufgaben und das Gefühl, etwas geschafft zu haben.",
          points: { "border-collie": 2, "husky": 1 }
        }
      ]
    }
  ]
};

(function () {
  "use strict";

  if (typeof TEST_DATA === "undefined") {
    const errorBox = document.getElementById("depTestError");
    errorBox.style.display = "block";
    errorBox.textContent = "Fehler: TEST_DATA wurde nicht gefunden. Die Engine braucht gültige Testdaten.";
    return;
  }

  const REQUIRED_TOP_LEVEL_FIELDS = ["title", "intro", "questions", "resultItems", "tieBreakOrder"];
  const REQUIRED_RESULT_FIELDS = ["id", "badge", "title", "links", "heroStyle"];
  const REQUIRED_LINK_FIELDS = ["slug", "title", "url"];
  const REQUIRED_QUESTION_FIELDS = ["text", "answers"];
  const REQUIRED_ANSWER_FIELDS = ["text", "points"];
  const ALLOWED_HERO_STYLES = ["low", "mild", "mid", "high"];

  const el = {
    wrap: document.getElementById("depTestWrap"),
    title: document.getElementById("depTestTitle"),
    intro: document.getElementById("depTestIntro"),
    error: document.getElementById("depTestError"),
    questions: document.getElementById("depTestQuestions"),
    submit: document.getElementById("depTestSubmit"),
    reset: document.getElementById("depTestReset"),
    result: document.getElementById("depTestResult"),
    resultHero: document.getElementById("depResultHero"),
    resultHeroMedia: document.getElementById("depResultHeroMedia"),
    resultHeroImage: document.getElementById("depResultHeroImage"),
    resultTitle: document.getElementById("depResultTitle"),
    scoreMeta: document.getElementById("depScoreMeta"),
    resultNote: document.getElementById("depResultNote"),
    links: document.getElementById("depLinks")
  };

  function showError(message) {
    el.error.style.display = "block";
    el.error.textContent = message;
  }

  function clearError() {
    el.error.style.display = "none";
    el.error.textContent = "";
  }

  function escapeHtml(str) {
    return String(str)
      .replace(/&/g, "&amp;")
      .replace(/</g, "&lt;")
      .replace(/>/g, "&gt;")
      .replace(/"/g, "&quot;")
      .replace(/'/g, "&#039;");
  }

  function isNonEmptyString(value) {
    return typeof value === "string" && value.trim() !== "";
  }

  function nl2p(text) {
    return String(text)
      .split(/\n{2,}/)
      .map(part => "<p>" + escapeHtml(part).replace(/\n/g, "<br>") + "</p>")
      .join("");
  }

  function endsWithSlug(url, slug) {
    const cleanUrl = String(url).replace(/\/+$/, "");
    const cleanSlug = String(slug).replace(/^\/+|\/+$/g, "");
    return cleanUrl.endsWith("/" + cleanSlug);
  }

  function validateTopLevelFields(data) {
    for (const key of REQUIRED_TOP_LEVEL_FIELDS) {
      if (!(key in data)) {
        return "Fehler: In TEST_DATA fehlt das Pflichtfeld '" + key + "'.";
      }
    }

    if (!isNonEmptyString(data.title)) {
      return "Fehler: TEST_DATA.title ist leer oder ungültig.";
    }

    if (!isNonEmptyString(data.intro)) {
      return "Fehler: TEST_DATA.intro ist leer oder ungültig.";
    }

    if (!Array.isArray(data.resultItems) || data.resultItems.length < 2) {
      return "Fehler: TEST_DATA.resultItems muss mindestens 2 konkrete Ergebnisse enthalten.";
    }

    if (!Array.isArray(data.tieBreakOrder) || data.tieBreakOrder.length !== data.resultItems.length) {
      return "Fehler: TEST_DATA.tieBreakOrder muss alle Ergebnis-IDs genau einmal enthalten.";
    }

    if (!Array.isArray(data.questions) || data.questions.length !== 10) {
      return "Fehler: TEST_DATA.questions muss genau 10 Fragen enthalten.";
    }

    return null;
  }

  function validateResultItems(data) {
    const seenIds = new Set();

    for (let i = 0; i < data.resultItems.length; i++) {
      const result = data.resultItems[i];

      if (!result || typeof result !== "object" || Array.isArray(result)) {
        return "Fehler: TEST_DATA.resultItems[" + i + "] ist ungültig.";
      }

      for (const field of REQUIRED_RESULT_FIELDS) {
        if (!(field in result)) {
          return "Fehler: In TEST_DATA.resultItems[" + i + "] fehlt das Feld '" + field + "'.";
        }
      }

      if (!isNonEmptyString(result.id)) {
        return "Fehler: TEST_DATA.resultItems[" + i + "].id ist leer oder ungültig.";
      }

      if (seenIds.has(result.id)) {
        return "Fehler: Die Ergebnis-ID '" + result.id + "' ist doppelt vorhanden.";
      }

      if (!isNonEmptyString(result.badge)) {
        return "Fehler: TEST_DATA.resultItems[" + i + "].badge ist leer oder ungültig.";
      }

      if (!isNonEmptyString(result.title)) {
        return "Fehler: TEST_DATA.resultItems[" + i + "].title ist leer oder ungültig.";
      }

      if (!Array.isArray(result.links) || result.links.length < 2 || result.links.length > 3) {
        return "Fehler: TEST_DATA.resultItems[" + i + "].links muss 2 bis 3 weiterführende Tests enthalten.";
      }

      if (!isNonEmptyString(result.heroStyle) || !ALLOWED_HERO_STYLES.includes(result.heroStyle)) {
        return "Fehler: TEST_DATA.resultItems[" + i + "].heroStyle ist ungültig. Erlaubt sind: low, mild, mid, high.";
      }

      if ("image" in result && result.image !== null && !isNonEmptyString(result.image)) {
        return "Fehler: TEST_DATA.resultItems[" + i + "].image ist ungültig.";
      }

      if ("imageAlt" in result && result.imageAlt !== null && !isNonEmptyString(result.imageAlt)) {
        return "Fehler: TEST_DATA.resultItems[" + i + "].imageAlt ist ungültig.";
      }

      const seenSlugs = new Set();

      for (let j = 0; j < result.links.length; j++) {
        const link = result.links[j];

        if (!link || typeof link !== "object" || Array.isArray(link)) {
          return "Fehler: Ein Link in TEST_DATA.resultItems[" + i + "].links ist ungültig.";
        }

        for (const field of REQUIRED_LINK_FIELDS) {
          if (!(field in link)) {
            return "Fehler: In TEST_DATA.resultItems[" + i + "].links[" + j + "] fehlt das Feld '" + field + "'.";
          }
        }

        if (!isNonEmptyString(link.slug)) {
          return "Fehler: Ein Link in TEST_DATA.resultItems[" + i + "].links hat keinen gültigen Slug.";
        }

        if (!isNonEmptyString(link.title)) {
          return "Fehler: Ein Link in TEST_DATA.resultItems[" + i + "].links hat keinen gültigen Titel.";
        }

        if (!isNonEmptyString(link.url)) {
          return "Fehler: Ein Link in TEST_DATA.resultItems[" + i + "].links hat keine gültige URL.";
        }

        if (seenSlugs.has(link.slug)) {
          return "Fehler: In TEST_DATA.resultItems[" + i + "] gibt es doppelte Links mit dem Slug '" + link.slug + "'.";
        }

        if (!endsWithSlug(link.url, link.slug)) {
          return "Fehler: In TEST_DATA.resultItems[" + i + "] passt die URL nicht zum Slug '" + link.slug + "'.";
        }

        seenSlugs.add(link.slug);
      }

      seenIds.add(result.id);
    }

    return null;
  }

  function validateTieBreakOrder(data) {
    const resultIds = data.resultItems.map(item => item.id).sort();
    const tieBreakIds = data.tieBreakOrder.slice().sort();

    if (JSON.stringify(resultIds) !== JSON.stringify(tieBreakIds)) {
      return "Fehler: TEST_DATA.tieBreakOrder passt nicht exakt zu den IDs aus TEST_DATA.resultItems.";
    }

    return null;
  }

  function validateQuestions(data) {
    const validResultIds = new Set(data.resultItems.map(item => item.id));
    const reachableResultIds = new Set();

    for (let i = 0; i < data.questions.length; i++) {
      const question = data.questions[i];

      if (!question || typeof question !== "object" || Array.isArray(question)) {
        return "Fehler: Frage " + (i + 1) + " ist ungültig.";
      }

      for (const field of REQUIRED_QUESTION_FIELDS) {
        if (!(field in question)) {
          return "Fehler: In Frage " + (i + 1) + " fehlt das Feld '" + field + "'.";
        }
      }

      if (!isNonEmptyString(question.text)) {
        return "Fehler: Frage " + (i + 1) + " hat keinen gültigen Text.";
      }

      if (!Array.isArray(question.answers) || question.answers.length !== 4) {
        return "Fehler: Frage " + (i + 1) + " muss genau 4 Antworten haben.";
      }

      for (let j = 0; j < question.answers.length; j++) {
        const answer = question.answers[j];

        if (!answer || typeof answer !== "object" || Array.isArray(answer)) {
          return "Fehler: Frage " + (i + 1) + ", Antwort " + (j + 1) + " ist ungültig.";
        }

        for (const field of REQUIRED_ANSWER_FIELDS) {
          if (!(field in answer)) {
            return "Fehler: In Frage " + (i + 1) + ", Antwort " + (j + 1) + " fehlt das Feld '" + field + "'.";
          }
        }

        if (!isNonEmptyString(answer.text)) {
          return "Fehler: Frage " + (i + 1) + ", Antwort " + (j + 1) + " hat keinen gültigen Text.";
        }

        if (typeof answer.points !== "object" || answer.points === null || Array.isArray(answer.points)) {
          return "Fehler: Frage " + (i + 1) + ", Antwort " + (j + 1) + " braucht ein gültiges points-Objekt.";
        }

        const pointKeys = Object.keys(answer.points);

        if (pointKeys.length === 0) {
          return "Fehler: Frage " + (i + 1) + ", Antwort " + (j + 1) + " muss mindestens einem Ergebnis Punkte geben.";
        }

        for (const resultId of pointKeys) {
          if (!validResultIds.has(resultId)) {
            return "Fehler: Frage " + (i + 1) + ", Antwort " + (j + 1) + " verweist auf die unbekannte Ergebnis-ID '" + resultId + "'.";
          }

          const value = answer.points[resultId];

          if (!Number.isInteger(value) || value < 0) {
            return "Fehler: Frage " + (i + 1) + ", Antwort " + (j + 1) + " hat bei '" + resultId + "' keinen gültigen Punktwert.";
          }

          if (value > 0) {
            reachableResultIds.add(resultId);
          }
        }
      }
    }

    const unreachableIds = data.resultItems
      .map(item => item.id)
      .filter(id => !reachableResultIds.has(id));

    if (unreachableIds.length > 0) {
      return "Fehler: Diese Ergebnisse sind über keine Antwort erreichbar: " + unreachableIds.join(", ") + ".";
    }

    return null;
  }

  function validateTestData(data) {
    const topLevelError = validateTopLevelFields(data);
    if (topLevelError) {
      return topLevelError;
    }

    const resultItemsError = validateResultItems(data);
    if (resultItemsError) {
      return resultItemsError;
    }

    const tieBreakError = validateTieBreakOrder(data);
    if (tieBreakError) {
      return tieBreakError;
    }

    const questionsError = validateQuestions(data);
    if (questionsError) {
      return questionsError;
    }

    return null;
  }

  function renderQuestions(data, userAnswers) {
    let html = "";

    data.questions.forEach((question, qIndex) => {
      html += `
        <div class="dep-question">
          <div class="dep-question-title">${qIndex + 1}. ${escapeHtml(question.text)}</div>
      `;

      question.answers.forEach((answer, aIndex) => {
        const inputId = `depQ${qIndex}A${aIndex}`;

        html += `
          <label class="dep-answer" for="${inputId}">
            <input
              type="radio"
              id="${inputId}"
              name="depQ${qIndex}"
              value="${aIndex}"
              ${userAnswers[qIndex] === aIndex ? "checked" : ""}
            >
            <span class="dep-answer-text">${escapeHtml(answer.text)}</span>
          </label>
        `;
      });

      html += `</div>`;
    });

    el.questions.innerHTML = html;
  }

  function bindAnswerEvents(userAnswers) {
    const radioInputs = el.questions.querySelectorAll('input[type="radio"]');

    radioInputs.forEach(input => {
      input.addEventListener("change", function () {
        const qIndex = Number(this.name.replace("depQ", ""));
        userAnswers[qIndex] = Number(this.value);
        clearError();
      });
    });
  }

  function renderTraitsList(items) {
    const lis = items.map(item => "<li>" + escapeHtml(item) + "</li>").join("");
    return '<ul class="dep-advice-list">' + lis + "</ul>";
  }

  function renderLinks(links) {
    return links.map(link => {
      return `
        <a class="dep-link-card" href="${escapeHtml(link.url)}" data-slug="${escapeHtml(link.slug)}">
          ${escapeHtml(link.title)}
        </a>
      `;
    }).join("");
  }

  function buildResultScores(data, userAnswers) {
    const scores = {};

    data.resultItems.forEach(item => {
      scores[item.id] = 0;
    });

    data.questions.forEach((question, qIndex) => {
      const selectedAnswerIndex = userAnswers[qIndex];
      const selectedAnswer = question.answers[selectedAnswerIndex];

      Object.keys(selectedAnswer.points).forEach(resultId => {
        scores[resultId] += selectedAnswer.points[resultId];
      });
    });

    return scores;
  }

  function getWinningResultId(scores, tieBreakOrder) {
    const maxScore = Math.max.apply(null, Object.values(scores));
    const candidates = Object.keys(scores).filter(resultId => scores[resultId] === maxScore);

    if (candidates.length === 1) {
      return candidates[0];
    }

    for (const resultId of tieBreakOrder) {
      if (candidates.includes(resultId)) {
        return resultId;
      }
    }

    return tieBreakOrder[0];
  }

  function getResultById(data, resultId) {
    return data.resultItems.find(item => item.id === resultId) || null;
  }

  function getHeroClassByStyle(heroStyle) {
    if (heroStyle === "low") return "dep-result-hero dep-result-hero--low";
    if (heroStyle === "mild") return "dep-result-hero dep-result-hero--mild";
    if (heroStyle === "mid") return "dep-result-hero dep-result-hero--mid";
    return "dep-result-hero dep-result-hero--high";
  }

  function resetHeroMedia() {
    el.resultHeroMedia.style.display = "none";
    el.resultHeroImage.removeAttribute("src");
    el.resultHeroImage.setAttribute("alt", "");
  }

  function renderHeroMedia(resultData) {
    if (isNonEmptyString(resultData.image)) {
      el.resultHeroImage.src = resultData.image;
      el.resultHeroImage.alt = isNonEmptyString(resultData.imageAlt) ? resultData.imageAlt : resultData.title;
      el.resultHeroMedia.style.display = "flex";
      return;
    }

    resetHeroMedia();
  }

  function resetTest(userAnswers) {
    for (let i = 0; i < userAnswers.length; i++) {
      userAnswers[i] = undefined;
    }

    const radioInputs = el.questions.querySelectorAll('input[type="radio"]');
    radioInputs.forEach(input => {
      input.checked = false;
    });

    clearError();
    el.result.style.display = "none";
    el.resultHero.className = "dep-result-hero";
    el.scoreMeta.textContent = "";
    el.scoreMeta.style.display = "none";
    el.resultNote.textContent = "";
    el.resultNote.style.display = "none";
    el.resultTitle.textContent = "";
    el.links.innerHTML = "";
    resetHeroMedia();
    el.wrap.scrollIntoView({ behavior: "smooth", block: "start" });
  }

  function renderResult(resultData) {
  el.resultHero.className = getHeroClassByStyle(resultData.heroStyle);
  renderHeroMedia(resultData);
  el.resultTitle.textContent = resultData.title;
  el.scoreMeta.textContent = resultData.badge;
  el.scoreMeta.style.display = "block";
  el.resultNote.textContent = "";
  el.resultNote.style.display = "none";
  el.links.innerHTML = renderLinks(resultData.links);

  el.result.style.display = "block";
  el.result.scrollIntoView({ behavior: "smooth", block: "start" });
}

  function init() {
    const validationError = validateTestData(TEST_DATA);

    if (validationError) {
      showError(validationError);
      return;
    }

    clearError();

    el.title.textContent = TEST_DATA.title;
    el.intro.textContent = TEST_DATA.intro;
    el.scoreMeta.style.display = "none";
    el.resultNote.style.display = "none";
    resetHeroMedia();

    const userAnswers = new Array(TEST_DATA.questions.length).fill(undefined);

    renderQuestions(TEST_DATA, userAnswers);
    bindAnswerEvents(userAnswers);

    el.submit.addEventListener("click", function () {
      const unanswered = userAnswers
        .map((value, index) => value === undefined ? index + 1 : null)
        .filter(Boolean);

      if (unanswered.length > 0) {
        el.result.style.display = "none";
        showError("Bitte beantworte alle Fragen. Offen: " + unanswered.join(", "));
        el.error.scrollIntoView({ behavior: "smooth", block: "center" });
        return;
      }

      clearError();

      const scores = buildResultScores(TEST_DATA, userAnswers);
      const winningResultId = getWinningResultId(scores, TEST_DATA.tieBreakOrder);
      const resultData = getResultById(TEST_DATA, winningResultId);

      if (!resultData) {
        showError("Fehler: Das Ergebnis konnte nicht berechnet werden.");
        return;
      }

      renderResult(resultData);
    });

    el.reset.addEventListener("click", function () {
      resetTest(userAnswers);
    });
  }

  init();
})();
</script>
				</div>
					</div>
				</div>
				</div>
		]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Welche Katze bist du?</title>
		<link>https://checkdich.at/category-fun/welche-katzenrasse-waerst-du-test/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Fri, 01 May 2026 17:59:19 +0000</pubDate>
				<category><![CDATA[Fun Tests]]></category>
		<guid isPermaLink="false">https://checkdich.at/?p=1731</guid>

					<description><![CDATA[Ergebnis anzeigen Zurücksetzen Passende nächste Tests &#8222;`]]></description>
			<style id="elementor-post-1731">.elementor-1731 .elementor-element.elementor-element-8ff3154{--display:flex;--flex-direction:column;--container-widget-width:100%;--container-widget-height:initial;--container-widget-flex-grow:0;--container-widget-align-self:initial;--flex-wrap-mobile:wrap;}</style>							<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="1731" class="elementor elementor-1731" data-elementor-post-type="post">
				<div class="elementor-element elementor-element-8ff3154 e-flex e-con-boxed e-con e-parent" data-id="8ff3154" data-element_type="container" data-e-type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-4c668f4 elementor-widget elementor-widget-html" data-id="4c668f4" data-element_type="widget" data-e-type="widget" data-widget_type="html.default">
					
<style>
.cat-test-wrap{max-width:860px;margin:32px auto;padding:24px;background:#fff;border:1px solid #e7ecf3;border-radius:18px;box-shadow:0 8px 24px rgba(15,23,42,.06);font-family:Arial,sans-serif;color:#1f2937}
.cat-test-header{margin-bottom:24px}
.cat-test-title{margin:0 0 10px 0;font-size:30px;line-height:1.2;font-weight:700;color:#111827}
.cat-test-intro{margin:0;font-size:16px;line-height:1.6;color:#4b5563}
.cat-test-error{display:none;margin:0 0 22px 0;padding:14px 16px;border:1px solid #f3c2c2;background:#fff4f4;color:#9f1d1d;border-radius:12px;font-size:14px;line-height:1.5}
.cat-question{margin-bottom:22px;padding:18px;border:1px solid #e7ecf3;border-radius:16px;background:#fbfcfe}
.cat-question-title{margin:0 0 14px 0;font-size:17px;line-height:1.5;font-weight:700;color:#111827}
.cat-answer{display:flex;align-items:center;gap:10px;margin-top:8px;padding:12px 14px;border:1px solid #dde5ef;border-radius:12px;background:#fff;cursor:pointer;transition:border-color .18s ease,box-shadow .18s ease,background .18s ease}
.cat-answer:hover{border-color:#bfd0e6;background:#f8fbff}
.cat-answer input{margin:0;flex:0 0 auto}
.cat-answer-text{font-size:15px;line-height:1.45;color:#1f2937}
.cat-actions{margin-top:24px}
.cat-btn{display:inline-block;width:100%;border:0;border-radius:14px;padding:15px 18px;background:#2563eb;color:#fff;font-size:16px;font-weight:700;cursor:pointer;transition:transform .15s ease,box-shadow .15s ease,background .15s ease;box-shadow:0 10px 22px rgba(37,99,235,.18)}
.cat-btn:hover{background:#1d4ed8}
.cat-btn:focus{outline:3px solid rgba(37,99,235,.2);outline-offset:2px}
.cat-btn:active{transform:translateY(1px)}
.cat-btn-secondary{margin-top:12px;background:#e5e7eb;color:#1f2937;box-shadow:none}
.cat-btn-secondary:hover{background:#dbe1e8}
.cat-result{display:none;margin-top:30px;padding-top:10px}
.cat-result-hero{padding:24px 20px;border-radius:18px;margin-bottom:18px;text-align:center;border:1px solid transparent}
.cat-result-hero--low{background:#eef6ff;border-color:#cfe3ff}
.cat-result-hero--mild{background:#f4f8ff;border-color:#d9e7ff}
.cat-result-hero--mid{background:#fff7e8;border-color:#f4ddb0}
.cat-result-hero--high{background:#fff0f0;border-color:#f1c6c6}
.cat-result-title{margin:0;font-size:31px;line-height:1.15;font-weight:800;color:#111827}
.cat-card{margin-bottom:14px;padding:18px;border:1px solid #e7ecf3;border-radius:16px;background:#fff}
.cat-card-heading{margin:0 0 10px 0;font-size:15px;line-height:1.3;font-weight:800;letter-spacing:.02em;text-transform:uppercase;color:#475569}
.cat-links-grid{display:grid;gap:10px}
.cat-link-card{display:block;padding:14px 16px;border:1px solid #dbe5f0;border-radius:14px;text-decoration:none;background:#f8fbff;color:#0f172a;font-weight:700;transition:border-color .18s ease,transform .18s ease,background .18s ease}
.cat-link-card:hover{border-color:#bfd0e6;background:#f1f7ff;transform:translateY(-1px)}
.cat-score-meta{margin-top:16px;font-size:18px;line-height:1.4;font-weight:700;color:#334155;text-align:center}
.cat-result-note{display:none;margin-top:14px;font-size:14px;line-height:1.6;color:#475569;text-align:center}
.cat-result-hero-media{display:none;justify-content:center;align-items:center;margin:0 0 14px 0}
.cat-result-hero-media img{display:block;max-width:88px;max-height:88px;width:auto;height:auto}
@media(max-width:640px){.cat-test-wrap{padding:18px;border-radius:14px}.cat-test-title{font-size:25px}.cat-result-title{font-size:26px}.cat-question{padding:14px}.cat-answer{padding:11px 12px}.cat-score-meta{font-size:17px}.cat-result-hero-media img{max-width:76px;max-height:76px}}
</style>

<div class="cat-test-wrap" id="catTestWrap">
  <div class="cat-test-header">
    <h1 class="cat-test-title" id="catTestTitle"></h1>
    <p class="cat-test-intro" id="catTestIntro"></p>
  </div>

  <div class="cat-test-error" id="catTestError"></div>
  <div id="catTestQuestions"></div>

  <div class="cat-actions">
    <button class="cat-btn" id="catTestSubmit" type="button">Ergebnis anzeigen</button>
    <button class="cat-btn cat-btn-secondary" id="catTestReset" type="button">Zurücksetzen</button>
  </div>

  <div class="cat-result" id="catTestResult">
    <div class="cat-result-hero" id="catResultHero">
      <div class="cat-result-hero-media" id="catResultHeroMedia">
        <img decoding="async" id="catResultHeroImage" src="" alt="">
      </div>
      <div class="cat-score-meta" id="catScoreMeta"></div>
      <h3 class="cat-result-title" id="catResultTitle"></h3>
      <div class="cat-result-note" id="catResultNote"></div>
    </div>

    <div class="cat-card">
      <div class="cat-card-heading">Passende nächste Tests</div>
      <div class="cat-links-grid" id="catLinks"></div>
    </div>
  </div>
</div>

<script>
(function(){
"use strict";

const CAT_TEST_DATA={
title:"Welche Katze bist du?",
intro:"Finde heraus, welche Katzenrasse am besten zu deiner Art passt. Dieser Fun-Test ordnet dich spielerisch einem konkreten Katzentyp zu – von ruhig und gemütlich bis wach, direkt und abenteuerlustig.",
tieBreakOrder:["britisch-kurzhaar","siamkatze","maine-coon","bengalkatze"],
resultItems:[
{id:"britisch-kurzhaar",badge:"Dein Ergebnis",title:"Du bist eine Britisch Kurzhaar",heroStyle:"low",links:[
{slug:"welches-pokemon-waerst-du-test",title:"Welches Pokémon wärst du?",url:"/fun-tests/welches-pokemon-waerst-du-test"},
{slug:"bist-du-rick-oder-morty-test",title:"Bist du Rick oder Morty?",url:"/fun-tests/bist-du-rick-oder-morty-test"},
{slug:"welche-hunderasse-waerst-du-test",title:"Welche Hunderasse wärst du?",url:"/fun-tests/welche-hunderasse-waerst-du-test"}]},
{id:"siamkatze",badge:"Dein Ergebnis",title:"Du bist eine Siamkatze",heroStyle:"high",links:[
{slug:"welches-pokemon-waerst-du-test",title:"Welches Pokémon wärst du?",url:"/fun-tests/welches-pokemon-waerst-du-test"},
{slug:"bist-du-rick-oder-morty-test",title:"Bist du Rick oder Morty?",url:"/fun-tests/bist-du-rick-oder-morty-test"},
{slug:"welche-hunderasse-waerst-du-test",title:"Welche Hunderasse wärst du?",url:"/fun-tests/welche-hunderasse-waerst-du-test"}]},
{id:"maine-coon",badge:"Dein Ergebnis",title:"Du bist eine Maine Coon",heroStyle:"mild",links:[
{slug:"welches-pokemon-waerst-du-test",title:"Welches Pokémon wärst du?",url:"/fun-tests/welches-pokemon-waerst-du-test"},
{slug:"bist-du-rick-oder-morty-test",title:"Bist du Rick oder Morty?",url:"/fun-tests/bist-du-rick-oder-morty-test"},
{slug:"welche-hunderasse-waerst-du-test",title:"Welche Hunderasse wärst du?",url:"/fun-tests/welche-hunderasse-waerst-du-test"}]},
{id:"bengalkatze",badge:"Dein Ergebnis",title:"Du bist eine Bengalkatze",heroStyle:"mid",links:[
{slug:"welches-pokemon-waerst-du-test",title:"Welches Pokémon wärst du?",url:"/fun-tests/welches-pokemon-waerst-du-test"},
{slug:"bist-du-rick-oder-morty-test",title:"Bist du Rick oder Morty?",url:"/fun-tests/bist-du-rick-oder-morty-test"},
{slug:"welche-hunderasse-waerst-du-test",title:"Welche Hunderasse wärst du?",url:"/fun-tests/welche-hunderasse-waerst-du-test"}]}
],
questions:[
{text:"Du kommst in einen Raum, in dem schon mehrere Leute sind. Was machst du zuerst?",answers:[
{text:"Ich suche mir einen ruhigen Platz und beobachte erst einmal.",points:{"britisch-kurzhaar":2,"maine-coon":1}},
{text:"Ich begrüße direkt jemanden und komme schnell ins Gespräch.",points:{"siamkatze":2,"bengalkatze":1}},
{text:"Ich bewege mich entspannt durch den Raum und wirke sofort präsent.",points:{"maine-coon":2,"britisch-kurzhaar":1}},
{text:"Ich schaue sofort, wo etwas Interessantes passiert.",points:{"bengalkatze":2,"siamkatze":1}}
]},
{text:"Ein freier Nachmittag steht an. Was klingt für dich am passendsten?",answers:[
{text:"Gemütlich daheim bleiben, etwas Gutes essen und nichts übertreiben.",points:{"britisch-kurzhaar":2}},
{text:"Jemanden treffen, reden, lachen und nicht allein herumhängen.",points:{"siamkatze":2,"maine-coon":1}},
{text:"Etwas Ruhiges machen, aber am liebsten mit netter Gesellschaft.",points:{"maine-coon":2,"britisch-kurzhaar":1}},
{text:"Etwas Neues ausprobieren, spontan rausgehen oder mich bewegen.",points:{"bengalkatze":2,"siamkatze":1}}
]},
{text:"Jemand ändert kurzfristig einen gemeinsamen Plan. Wie reagierst du am ehesten?",answers:[
{text:"Ich finde es nicht ideal, bleibe aber äußerlich ziemlich ruhig.",points:{"britisch-kurzhaar":2,"maine-coon":1}},
{text:"Ich sage sofort, was ich davon halte.",points:{"siamkatze":2}},
{text:"Ich versuche, eine entspannte Lösung für alle zu finden.",points:{"maine-coon":2,"britisch-kurzhaar":1}},
{text:"Ich nehme es als Anlass, den Plan gleich komplett spannender zu machen.",points:{"bengalkatze":2,"siamkatze":1}}
]},
{text:"In einer Gruppe entsteht plötzlich Langeweile. Was wäre typisch für dich?",answers:[
{text:"Ich störe mich nicht daran und genieße eher die Ruhe.",points:{"britisch-kurzhaar":2}},
{text:"Ich beginne ein Gespräch, damit wieder mehr Energie entsteht.",points:{"siamkatze":2,"bengalkatze":1}},
{text:"Ich bringe unaufdringlich eine Idee ein, die alle mitnehmen kann.",points:{"maine-coon":2,"britisch-kurzhaar":1}},
{text:"Ich schlage spontan etwas Aktives oder Unerwartetes vor.",points:{"bengalkatze":2,"maine-coon":1}}
]},
{text:"Du bekommst eine neue Aufgabe, bei der nicht alles klar ist. Wie gehst du heran?",answers:[
{text:"Ich will zuerst verstehen, was wirklich nötig ist, und arbeite dann ruhig los.",points:{"britisch-kurzhaar":2,"maine-coon":1}},
{text:"Ich frage direkt nach, diskutiere Optionen und brauche Austausch.",points:{"siamkatze":2}},
{text:"Ich bleibe gelassen und finde Schritt für Schritt meinen Weg.",points:{"maine-coon":2,"britisch-kurzhaar":1}},
{text:"Ich probiere schnell etwas aus und lerne beim Machen.",points:{"bengalkatze":2,"siamkatze":1}}
]},
{text:"Welche Rolle hast du in deinem Freundeskreis am ehesten?",answers:[
{text:"Die Person, bei der man Ruhe und Verlässlichkeit findet.",points:{"britisch-kurzhaar":2,"maine-coon":1}},
{text:"Die Person, die viel redet, verbindet und Dinge ausspricht.",points:{"siamkatze":2}},
{text:"Die Person, die warm, loyal und angenehm präsent ist.",points:{"maine-coon":2,"britisch-kurzhaar":1}},
{text:"Die Person, die Bewegung, Ideen und Überraschungen reinbringt.",points:{"bengalkatze":2,"siamkatze":1}}
]},
{text:"Du bist in einer neuen Umgebung. Was zieht deine Aufmerksamkeit zuerst an?",answers:[
{text:"Ob es dort angenehm, ruhig und bequem ist.",points:{"britisch-kurzhaar":2}},
{text:"Welche Menschen dort sind und mit wem ich reden könnte.",points:{"siamkatze":2,"maine-coon":1}},
{text:"Ob die Stimmung freundlich und offen wirkt.",points:{"maine-coon":2,"britisch-kurzhaar":1}},
{text:"Was man dort entdecken, ausprobieren oder erkunden kann.",points:{"bengalkatze":2,"siamkatze":1}}
]},
{text:"Jemand macht einen kleinen Seitenhieb gegen dich. Was passiert bei dir zuerst?",answers:[
{text:"Ich lasse mir äußerlich wenig anmerken und ziehe mich innerlich eher zurück.",points:{"britisch-kurzhaar":2,"maine-coon":1}},
{text:"Ich reagiere direkt und lasse das nicht einfach stehen.",points:{"siamkatze":2,"bengalkatze":1}},
{text:"Ich bleibe ruhig, merke es mir aber genau.",points:{"maine-coon":2,"britisch-kurzhaar":1}},
{text:"Ich kontere spielerisch oder drehe die Situation schnell um.",points:{"bengalkatze":2,"siamkatze":1}}
]},
{text:"Wie sieht dein idealer Platz zum Abschalten aus?",answers:[
{text:"Ein bequemer, ruhiger Ort, an dem mich niemand stört.",points:{"britisch-kurzhaar":2}},
{text:"Ein Ort, an dem ich mit vertrauten Menschen reden kann.",points:{"siamkatze":2,"maine-coon":1}},
{text:"Ein großzügiger, gemütlicher Platz mit entspannter Atmosphäre.",points:{"maine-coon":2,"britisch-kurzhaar":1}},
{text:"Ein Ort, an dem ich mich bewegen, schauen oder etwas entdecken kann.",points:{"bengalkatze":2}}
]},
{text:"Wenn du dich für ein Wochenende entscheiden müsstest, was passt am besten?",answers:[
{text:"Wenig Termine, gutes Essen, viel Ruhe.",points:{"britisch-kurzhaar":2,"maine-coon":1}},
{text:"Viele Gespräche, Besuch oder ein gemeinsamer Abend.",points:{"siamkatze":2}},
{text:"Eine Mischung aus Nähe, Ruhe und angenehmer Aktivität.",points:{"maine-coon":2,"britisch-kurzhaar":1}},
{text:"Spontane Pläne, Action und möglichst keine Langeweile.",points:{"bengalkatze":2,"siamkatze":1}}
]}
]
};

const REQUIRED_TOP_LEVEL_FIELDS=["title","intro","questions","resultItems","tieBreakOrder"];
const REQUIRED_RESULT_FIELDS=["id","badge","title","links","heroStyle"];
const REQUIRED_LINK_FIELDS=["slug","title","url"];
const REQUIRED_QUESTION_FIELDS=["text","answers"];
const REQUIRED_ANSWER_FIELDS=["text","points"];
const ALLOWED_HERO_STYLES=["low","mild","mid","high"];

const el={
wrap:document.getElementById("catTestWrap"),
title:document.getElementById("catTestTitle"),
intro:document.getElementById("catTestIntro"),
error:document.getElementById("catTestError"),
questions:document.getElementById("catTestQuestions"),
submit:document.getElementById("catTestSubmit"),
reset:document.getElementById("catTestReset"),
result:document.getElementById("catTestResult"),
resultHero:document.getElementById("catResultHero"),
resultHeroMedia:document.getElementById("catResultHeroMedia"),
resultHeroImage:document.getElementById("catResultHeroImage"),
resultTitle:document.getElementById("catResultTitle"),
scoreMeta:document.getElementById("catScoreMeta"),
resultNote:document.getElementById("catResultNote"),
links:document.getElementById("catLinks")
};

function showError(message){el.error.style.display="block";el.error.textContent=message}
function clearError(){el.error.style.display="none";el.error.textContent=""}
function escapeHtml(str){return String(str).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}
function isNonEmptyString(value){return typeof value==="string"&&value.trim()!==""}
function endsWithSlug(url,slug){const cleanUrl=String(url).replace(/\/+$/,"");const cleanSlug=String(slug).replace(/^\/+|\/+$/g,"");return cleanUrl.endsWith("/"+cleanSlug)}

function validateTopLevelFields(data){
for(const key of REQUIRED_TOP_LEVEL_FIELDS){if(!(key in data))return"Fehler: In TEST_DATA fehlt das Pflichtfeld '"+key+"'."}
if(!isNonEmptyString(data.title))return"Fehler: TEST_DATA.title ist leer oder ungültig.";
if(!isNonEmptyString(data.intro))return"Fehler: TEST_DATA.intro ist leer oder ungültig.";
if(!Array.isArray(data.resultItems)||data.resultItems.length<2)return"Fehler: TEST_DATA.resultItems muss mindestens 2 konkrete Ergebnisse enthalten.";
if(!Array.isArray(data.tieBreakOrder)||data.tieBreakOrder.length!==data.resultItems.length)return"Fehler: TEST_DATA.tieBreakOrder muss alle Ergebnis-IDs genau einmal enthalten.";
if(!Array.isArray(data.questions)||data.questions.length!==10)return"Fehler: TEST_DATA.questions muss genau 10 Fragen enthalten.";
return null;
}

function validateResultItems(data){
const seenIds=new Set();
for(let i=0;i<data.resultItems.length;i++){
const result=data.resultItems[i];
if(!result||typeof result!=="object"||Array.isArray(result))return"Fehler: TEST_DATA.resultItems["+i+"] ist ungültig.";
for(const field of REQUIRED_RESULT_FIELDS){if(!(field in result))return"Fehler: In TEST_DATA.resultItems["+i+"] fehlt das Feld '"+field+"'."}
if(!isNonEmptyString(result.id))return"Fehler: TEST_DATA.resultItems["+i+"].id ist leer oder ungültig.";
if(seenIds.has(result.id))return"Fehler: Die Ergebnis-ID '"+result.id+"' ist doppelt vorhanden.";
if(!isNonEmptyString(result.badge))return"Fehler: TEST_DATA.resultItems["+i+"].badge ist leer oder ungültig.";
if(!isNonEmptyString(result.title))return"Fehler: TEST_DATA.resultItems["+i+"].title ist leer oder ungültig.";
if(!Array.isArray(result.links)||result.links.length<2||result.links.length>3)return"Fehler: TEST_DATA.resultItems["+i+"].links muss 2 bis 3 weiterführende Tests enthalten.";
if(!isNonEmptyString(result.heroStyle)||!ALLOWED_HERO_STYLES.includes(result.heroStyle))return"Fehler: TEST_DATA.resultItems["+i+"].heroStyle ist ungültig. Erlaubt sind: low, mild, mid, high.";
const seenSlugs=new Set();
for(let j=0;j<result.links.length;j++){
const link=result.links[j];
if(!link||typeof link!=="object"||Array.isArray(link))return"Fehler: Ein Link in TEST_DATA.resultItems["+i+"].links ist ungültig.";
for(const field of REQUIRED_LINK_FIELDS){if(!(field in link))return"Fehler: In TEST_DATA.resultItems["+i+"].links["+j+"] fehlt das Feld '"+field+"'."}
if(!isNonEmptyString(link.slug))return"Fehler: Ein Link in TEST_DATA.resultItems["+i+"].links hat keinen gültigen Slug.";
if(!isNonEmptyString(link.title))return"Fehler: Ein Link in TEST_DATA.resultItems["+i+"].links hat keinen gültigen Titel.";
if(!isNonEmptyString(link.url))return"Fehler: Ein Link in TEST_DATA.resultItems["+i+"].links hat keine gültige URL.";
if(seenSlugs.has(link.slug))return"Fehler: In TEST_DATA.resultItems["+i+"] gibt es doppelte Links mit dem Slug '"+link.slug+"'.";
if(!endsWithSlug(link.url,link.slug))return"Fehler: In TEST_DATA.resultItems["+i+"] passt die URL nicht zum Slug '"+link.slug+"'.";
seenSlugs.add(link.slug);
}
seenIds.add(result.id);
}
return null;
}

function validateTieBreakOrder(data){
const resultIds=data.resultItems.map(item=>item.id).sort();
const tieBreakIds=data.tieBreakOrder.slice().sort();
if(JSON.stringify(resultIds)!==JSON.stringify(tieBreakIds))return"Fehler: TEST_DATA.tieBreakOrder passt nicht exakt zu den IDs aus TEST_DATA.resultItems.";
return null;
}

function validateQuestions(data){
const validResultIds=new Set(data.resultItems.map(item=>item.id));
const reachableResultIds=new Set();
for(let i=0;i<data.questions.length;i++){
const question=data.questions[i];
if(!question||typeof question!=="object"||Array.isArray(question))return"Fehler: Frage "+(i+1)+" ist ungültig.";
for(const field of REQUIRED_QUESTION_FIELDS){if(!(field in question))return"Fehler: In Frage "+(i+1)+" fehlt das Feld '"+field+"'."}
if(!isNonEmptyString(question.text))return"Fehler: Frage "+(i+1)+" hat keinen gültigen Text.";
if(!Array.isArray(question.answers)||question.answers.length!==4)return"Fehler: Frage "+(i+1)+" muss genau 4 Antworten haben.";
for(let j=0;j<question.answers.length;j++){
const answer=question.answers[j];
if(!answer||typeof answer!=="object"||Array.isArray(answer))return"Fehler: Frage "+(i+1)+", Antwort "+(j+1)+" ist ungültig.";
for(const field of REQUIRED_ANSWER_FIELDS){if(!(field in answer))return"Fehler: In Frage "+(i+1)+", Antwort "+(j+1)+" fehlt das Feld '"+field+"'."}
if(!isNonEmptyString(answer.text))return"Fehler: Frage "+(i+1)+", Antwort "+(j+1)+" hat keinen gültigen Text.";
if(typeof answer.points!=="object"||answer.points===null||Array.isArray(answer.points))return"Fehler: Frage "+(i+1)+", Antwort "+(j+1)+" braucht ein gültiges points-Objekt.";
const pointKeys=Object.keys(answer.points);
if(pointKeys.length===0)return"Fehler: Frage "+(i+1)+", Antwort "+(j+1)+" muss mindestens einem Ergebnis Punkte geben.";
for(const resultId of pointKeys){
if(!validResultIds.has(resultId))return"Fehler: Frage "+(i+1)+", Antwort "+(j+1)+" verweist auf die unbekannte Ergebnis-ID '"+resultId+"'.";
const value=answer.points[resultId];
if(!Number.isInteger(value)||value<0)return"Fehler: Frage "+(i+1)+", Antwort "+(j+1)+" hat bei '"+resultId+"' keinen gültigen Punktwert.";
if(value>0)reachableResultIds.add(resultId);
}
}
}
const unreachableIds=data.resultItems.map(item=>item.id).filter(id=>!reachableResultIds.has(id));
if(unreachableIds.length>0)return"Fehler: Diese Ergebnisse sind über keine Antwort erreichbar: "+unreachableIds.join(", ")+".";
return null;
}

function validateTestData(data){
return validateTopLevelFields(data)||validateResultItems(data)||validateTieBreakOrder(data)||validateQuestions(data);
}

function renderQuestions(data,userAnswers){
let html="";
data.questions.forEach((question,qIndex)=>{
html+=`<div class="cat-question"><div class="cat-question-title">${qIndex+1}. ${escapeHtml(question.text)}</div>`;
question.answers.forEach((answer,aIndex)=>{
const inputId=`catQ${qIndex}A${aIndex}`;
html+=`<label class="cat-answer" for="${inputId}"><input type="radio" id="${inputId}" name="catQ${qIndex}" value="${aIndex}" ${userAnswers[qIndex]===aIndex?"checked":""}><span class="cat-answer-text">${escapeHtml(answer.text)}</span></label>`;
});
html+=`</div>`;
});
el.questions.innerHTML=html;
}

function bindAnswerEvents(userAnswers){
const radioInputs=el.questions.querySelectorAll('input[type="radio"]');
radioInputs.forEach(input=>{
input.addEventListener("change",function(){
const qIndex=Number(this.name.replace("catQ",""));
userAnswers[qIndex]=Number(this.value);
clearError();
});
});
}

function renderLinks(links){
return links.map(link=>`<a class="cat-link-card" href="${escapeHtml(link.url)}" data-slug="${escapeHtml(link.slug)}">${escapeHtml(link.title)}</a>`).join("");
}

function buildResultScores(data,userAnswers){
const scores={};
data.resultItems.forEach(item=>{scores[item.id]=0});
data.questions.forEach((question,qIndex)=>{
const selectedAnswerIndex=userAnswers[qIndex];
const selectedAnswer=question.answers[selectedAnswerIndex];
Object.keys(selectedAnswer.points).forEach(resultId=>{scores[resultId]+=selectedAnswer.points[resultId]});
});
return scores;
}

function getWinningResultId(scores,tieBreakOrder){
const maxScore=Math.max.apply(null,Object.values(scores));
const candidates=Object.keys(scores).filter(resultId=>scores[resultId]===maxScore);
if(candidates.length===1)return candidates[0];
for(const resultId of tieBreakOrder){if(candidates.includes(resultId))return resultId}
return tieBreakOrder[0];
}

function getResultById(data,resultId){return data.resultItems.find(item=>item.id===resultId)||null}
function getHeroClassByStyle(heroStyle){
if(heroStyle==="low")return"cat-result-hero cat-result-hero--low";
if(heroStyle==="mild")return"cat-result-hero cat-result-hero--mild";
if(heroStyle==="mid")return"cat-result-hero cat-result-hero--mid";
return"cat-result-hero cat-result-hero--high";
}
function resetHeroMedia(){el.resultHeroMedia.style.display="none";el.resultHeroImage.removeAttribute("src");el.resultHeroImage.setAttribute("alt","")}
function renderHeroMedia(resultData){
if(isNonEmptyString(resultData.image)){el.resultHeroImage.src=resultData.image;el.resultHeroImage.alt=isNonEmptyString(resultData.imageAlt)?resultData.imageAlt:resultData.title;el.resultHeroMedia.style.display="flex";return}
resetHeroMedia();
}
function resetTest(userAnswers){
for(let i=0;i<userAnswers.length;i++)userAnswers[i]=undefined;
const radioInputs=el.questions.querySelectorAll('input[type="radio"]');
radioInputs.forEach(input=>{input.checked=false});
clearError();
el.result.style.display="none";
el.resultHero.className="cat-result-hero";
el.scoreMeta.textContent="";
el.scoreMeta.style.display="none";
el.resultNote.textContent="";
el.resultNote.style.display="none";
el.resultTitle.textContent="";
el.links.innerHTML="";
resetHeroMedia();
el.wrap.scrollIntoView({behavior:"smooth",block:"start"});
}
function renderResult(resultData){
el.resultHero.className=getHeroClassByStyle(resultData.heroStyle);
renderHeroMedia(resultData);
el.resultTitle.textContent=resultData.title;
el.scoreMeta.textContent=resultData.badge;
el.scoreMeta.style.display="block";
el.resultNote.textContent="";
el.resultNote.style.display="none";
el.links.innerHTML=renderLinks(resultData.links);
el.result.style.display="block";
el.result.scrollIntoView({behavior:"smooth",block:"start"});
}
function init(){
const validationError=validateTestData(CAT_TEST_DATA);
if(validationError){showError(validationError);return}
clearError();
el.title.textContent=CAT_TEST_DATA.title;
el.intro.textContent=CAT_TEST_DATA.intro;
el.scoreMeta.style.display="none";
el.resultNote.style.display="none";
resetHeroMedia();
const userAnswers=new Array(CAT_TEST_DATA.questions.length).fill(undefined);
renderQuestions(CAT_TEST_DATA,userAnswers);
bindAnswerEvents(userAnswers);
el.submit.addEventListener("click",function(){
const unanswered=userAnswers.map((value,index)=>value===undefined?index+1:null).filter(Boolean);
if(unanswered.length>0){el.result.style.display="none";showError("Bitte beantworte alle Fragen. Offen: "+unanswered.join(", "));el.error.scrollIntoView({behavior:"smooth",block:"center"});return}
clearError();
const scores=buildResultScores(CAT_TEST_DATA,userAnswers);
const winningResultId=getWinningResultId(scores,CAT_TEST_DATA.tieBreakOrder);
const resultData=getResultById(CAT_TEST_DATA,winningResultId);
if(!resultData){showError("Fehler: Das Ergebnis konnte nicht berechnet werden.");return}
renderResult(resultData);
});
el.reset.addEventListener("click",function(){resetTest(userAnswers)});
}

init();
})();
</script>
```
				</div>
					</div>
				</div>
				</div>
		]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Welche Droge bist du?</title>
		<link>https://checkdich.at/category-fun/welche-droge-bist-du-test/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Fri, 01 May 2026 17:56:24 +0000</pubDate>
				<category><![CDATA[Fun Tests]]></category>
		<guid isPermaLink="false">https://checkdich.at/?p=1726</guid>

					<description><![CDATA[Ergebnis anzeigen Zurücksetzen Passende nächste Tests &#8222;`]]></description>
			<style id="elementor-post-1726">.elementor-1726 .elementor-element.elementor-element-df7268a{--display:flex;--flex-direction:column;--container-widget-width:100%;--container-widget-height:initial;--container-widget-flex-grow:0;--container-widget-align-self:initial;--flex-wrap-mobile:wrap;}</style>							<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="1726" class="elementor elementor-1726" data-elementor-post-type="post">
				<div class="elementor-element elementor-element-df7268a e-flex e-con-boxed e-con e-parent" data-id="df7268a" data-element_type="container" data-e-type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-e0ba730 elementor-widget elementor-widget-html" data-id="e0ba730" data-element_type="widget" data-e-type="widget" data-widget_type="html.default">
					
<style>
.dep-test-wrap{
  max-width: 860px;
  margin: 32px auto;
  padding: 24px;
  background: #fff;
  border: 1px solid #e7ecf3;
  border-radius: 18px;
  box-shadow: 0 8px 24px rgba(15, 23, 42, 0.06);
  font-family: Arial, sans-serif;
  color: #1f2937;
}

.dep-test-header{
  margin-bottom: 24px;
}

.dep-test-title{
  margin: 0 0 10px 0;
  font-size: 30px;
  line-height: 1.2;
  font-weight: 700;
  color: #111827;
}

.dep-test-intro{
  margin: 0;
  font-size: 16px;
  line-height: 1.6;
  color: #4b5563;
}

.dep-test-error{
  display: none;
  margin: 0 0 22px 0;
  padding: 14px 16px;
  border: 1px solid #f3c2c2;
  background: #fff4f4;
  color: #9f1d1d;
  border-radius: 12px;
  font-size: 14px;
  line-height: 1.5;
}

.dep-question{
  margin-bottom: 22px;
  padding: 18px;
  border: 1px solid #e7ecf3;
  border-radius: 16px;
  background: #fbfcfe;
}

.dep-question-title{
  margin: 0 0 14px 0;
  font-size: 17px;
  line-height: 1.5;
  font-weight: 700;
  color: #111827;
}

.dep-answer{
  display: flex;
  align-items: center;
  gap: 10px;
  margin-top: 8px;
  padding: 12px 14px;
  border: 1px solid #dde5ef;
  border-radius: 12px;
  background: #fff;
  cursor: pointer;
  transition: border-color .18s ease, box-shadow .18s ease, background .18s ease;
}

.dep-answer:hover{
  border-color: #bfd0e6;
  background: #f8fbff;
}

.dep-answer input{
  margin: 0;
  flex: 0 0 auto;
}

.dep-answer-text{
  font-size: 15px;
  line-height: 1.45;
  color: #1f2937;
}

.dep-actions{
  margin-top: 24px;
}

.dep-btn{
  display: inline-block;
  width: 100%;
  border: 0;
  border-radius: 14px;
  padding: 15px 18px;
  background: #2563eb;
  color: #fff;
  font-size: 16px;
  font-weight: 700;
  cursor: pointer;
  transition: transform .15s ease, box-shadow .15s ease, background .15s ease;
  box-shadow: 0 10px 22px rgba(37, 99, 235, 0.18);
}

.dep-btn:hover{
  background: #1d4ed8;
}

.dep-btn:focus{
  outline: 3px solid rgba(37, 99, 235, 0.2);
  outline-offset: 2px;
}

.dep-btn:active{
  transform: translateY(1px);
}

.dep-btn-secondary{
  margin-top: 12px;
  background: #e5e7eb;
  color: #1f2937;
  box-shadow: none;
}

.dep-btn-secondary:hover{
  background: #dbe1e8;
}

.dep-result{
  display: none;
  margin-top: 30px;
  padding-top: 10px;
}

.dep-result-hero{
  padding: 24px 20px;
  border-radius: 18px;
  margin-bottom: 18px;
  text-align: center;
  border: 1px solid transparent;
}

.dep-result-hero--low{
  background: #eef6ff;
  border-color: #cfe3ff;
}

.dep-result-hero--mild{
  background: #f4f8ff;
  border-color: #d9e7ff;
}

.dep-result-hero--mid{
  background: #fff7e8;
  border-color: #f4ddb0;
}

.dep-result-hero--high{
  background: #fff0f0;
  border-color: #f1c6c6;
}

.dep-result-title{
  margin: 0;
  font-size: 31px;
  line-height: 1.15;
  font-weight: 800;
  color: #111827;
}

.dep-card{
  margin-bottom: 14px;
  padding: 18px;
  border: 1px solid #e7ecf3;
  border-radius: 16px;
  background: #fff;
}

.dep-card-heading{
  margin: 0 0 10px 0;
  font-size: 15px;
  line-height: 1.3;
  font-weight: 800;
  letter-spacing: .02em;
  text-transform: uppercase;
  color: #475569;
}

.dep-links-grid{
  display: grid;
  gap: 10px;
}

.dep-link-card{
  display: block;
  padding: 14px 16px;
  border: 1px solid #dbe5f0;
  border-radius: 14px;
  text-decoration: none;
  background: #f8fbff;
  color: #0f172a;
  font-weight: 700;
  transition: border-color .18s ease, transform .18s ease, background .18s ease;
}

.dep-link-card:hover{
  border-color: #bfd0e6;
  background: #f1f7ff;
  transform: translateY(-1px);
}

.dep-score-meta{
  margin-top: 16px;
  font-size: 18px;
  line-height: 1.4;
  font-weight: 700;
  color: #334155;
  text-align: center;
}

.dep-result-note{
  display: none;
  margin-top: 14px;
  font-size: 14px;
  line-height: 1.6;
  color: #475569;
  text-align: center;
}

.dep-result-hero-media{
  display: none;
  justify-content: center;
  align-items: center;
  margin: 0 0 14px 0;
}

.dep-result-hero-media img{
  display: block;
  max-width: 88px;
  max-height: 88px;
  width: auto;
  height: auto;
}

@media (max-width: 640px){
  .dep-test-wrap{
    padding: 18px;
    border-radius: 14px;
  }

  .dep-test-title{
    font-size: 25px;
  }

  .dep-result-title{
    font-size: 26px;
  }

  .dep-question{
    padding: 14px;
  }

  .dep-answer{
    padding: 11px 12px;
  }

  .dep-score-meta{
    font-size: 17px;
  }

  .dep-result-hero-media img{
    max-width: 76px;
    max-height: 76px;
  }
}
</style>

<div class="dep-test-wrap" id="depTestWrap">
  <div class="dep-test-header">
    <h1 class="dep-test-title" id="depTestTitle"></h1>
    <p class="dep-test-intro" id="depTestIntro"></p>
  </div>

  <div class="dep-test-error" id="depTestError"></div>

  <div id="depTestQuestions"></div>

  <div class="dep-actions">
    <button class="dep-btn" id="depTestSubmit" type="button">Ergebnis anzeigen</button>
    <button class="dep-btn dep-btn-secondary" id="depTestReset" type="button">Zurücksetzen</button>
  </div>

  <div class="dep-result" id="depTestResult">
    <div class="dep-result-hero" id="depResultHero">
      <div class="dep-result-hero-media" id="depResultHeroMedia">
        <img decoding="async" id="depResultHeroImage" src="" alt="">
      </div>
      <div class="dep-score-meta" id="depScoreMeta"></div>
      <h3 class="dep-result-title" id="depResultTitle"></h3>
      <div class="dep-result-note" id="depResultNote"></div>
    </div>

    <div class="dep-card">
      <div class="dep-card-heading">Passende nächste Tests</div>
      <div class="dep-links-grid" id="depLinks"></div>
    </div>
  </div>
</div>

<script>
(function () {
  "use strict";

  const TEST_DATA = {
    title: "Welche Droge bist du?",
    intro: "In diesem Fun-Test geht es darum, welcher Alltags-Vibe am ehesten zu dir passt: wach, locker, entspannt oder dauerhaft auf Standby.",
    tieBreakOrder: ["kaffee", "alkohol", "cannabis", "nikotin"],
    resultItems: [
      {
        id: "kaffee",
        badge: "Dein Ergebnis",
        title: "Du bist Kaffee",
        heroStyle: "high",
        links: [
          {
            slug: "welches-pokemon-waerst-du-test",
            title: "Welches Pokémon wärst du?",
            url: "/fun-tests/welches-pokemon-waerst-du-test"
          },
          {
            slug: "bist-du-rick-oder-morty-test",
            title: "Bist du Rick oder Morty?",
            url: "/fun-tests/bist-du-rick-oder-morty-test"
          },
          {
            slug: "welche-hunderasse-waerst-du-test",
            title: "Welche Hunderasse wärst du?",
            url: "/fun-tests/welche-hunderasse-waerst-du-test"
          }
        ]
      },
      {
        id: "alkohol",
        badge: "Dein Ergebnis",
        title: "Du bist Alkohol",
        heroStyle: "mid",
        links: [
          {
            slug: "welches-pokemon-waerst-du-test",
            title: "Welches Pokémon wärst du?",
            url: "/fun-tests/welches-pokemon-waerst-du-test"
          },
          {
            slug: "bist-du-rick-oder-morty-test",
            title: "Bist du Rick oder Morty?",
            url: "/fun-tests/bist-du-rick-oder-morty-test"
          },
          {
            slug: "welche-hunderasse-waerst-du-test",
            title: "Welche Hunderasse wärst du?",
            url: "/fun-tests/welche-hunderasse-waerst-du-test"
          }
        ]
      },
      {
        id: "cannabis",
        badge: "Dein Ergebnis",
        title: "Du bist Cannabis",
        heroStyle: "mild",
        links: [
          {
            slug: "welches-pokemon-waerst-du-test",
            title: "Welches Pokémon wärst du?",
            url: "/fun-tests/welches-pokemon-waerst-du-test"
          },
          {
            slug: "bist-du-rick-oder-morty-test",
            title: "Bist du Rick oder Morty?",
            url: "/fun-tests/bist-du-rick-oder-morty-test"
          },
          {
            slug: "welche-hunderasse-waerst-du-test",
            title: "Welche Hunderasse wärst du?",
            url: "/fun-tests/welche-hunderasse-waerst-du-test"
          }
        ]
      },
      {
        id: "nikotin",
        badge: "Dein Ergebnis",
        title: "Du bist Nikotin",
        heroStyle: "low",
        links: [
          {
            slug: "welches-pokemon-waerst-du-test",
            title: "Welches Pokémon wärst du?",
            url: "/fun-tests/welches-pokemon-waerst-du-test"
          },
          {
            slug: "bist-du-rick-oder-morty-test",
            title: "Bist du Rick oder Morty?",
            url: "/fun-tests/bist-du-rick-oder-morty-test"
          },
          {
            slug: "welche-hunderasse-waerst-du-test",
            title: "Welche Hunderasse wärst du?",
            url: "/fun-tests/welche-hunderasse-waerst-du-test"
          }
        ]
      }
    ],
    questions: [
      {
        text: "Du kommst zu spät zu einem Treffen und alle schauen dich an. Was ist am ehesten deine Reaktion?",
        answers: [
          {
            text: "Du kommst direkt rein, redest schnell und tust so, als wäre alles unter Kontrolle.",
            points: { kaffee: 2, nikotin: 1 }
          },
          {
            text: "Du machst einen lockeren Spruch und versuchst, die Stimmung sofort wieder leicht zu machen.",
            points: { alkohol: 2, kaffee: 1 }
          },
          {
            text: "Du setzt dich ruhig dazu und lässt die Situation erst einmal abklingen.",
            points: { cannabis: 2, alkohol: 1 }
          },
          {
            text: "Du bist kurz angespannt, ordnest dich schnell ein und beobachtest, wie die anderen reagieren.",
            points: { nikotin: 2, cannabis: 1 }
          }
        ]
      },
      {
        text: "Ein spontaner Plan für den Abend steht im Raum. Was zieht dich am ehesten an?",
        answers: [
          {
            text: "Ein Ort mit Tempo, Licht, Gesprächen und genug Energie, damit nichts einschläft.",
            points: { kaffee: 2, alkohol: 1 }
          },
          {
            text: "Ein Abend, der locker startet und später gerne lauter, wilder oder chaotischer werden darf.",
            points: { alkohol: 2, nikotin: 1 }
          },
          {
            text: "Ein entspannter Abend ohne Druck, am besten mit Musik, Sofa oder ruhiger Runde.",
            points: { cannabis: 2, kaffee: 1 }
          },
          {
            text: "Ein kurzer, intensiver Plan, bei dem du jederzeit wieder gehen kannst, wenn es dir reicht.",
            points: { nikotin: 2, cannabis: 1 }
          }
        ]
      },
      {
        text: "In einer Gruppe entsteht eine längere Pause im Gespräch. Was machst du?",
        answers: [
          {
            text: "Du wirfst ein neues Thema rein, damit wieder Bewegung in die Runde kommt.",
            points: { kaffee: 2, alkohol: 1 }
          },
          {
            text: "Du machst die Pause mit Humor weniger steif und bringst die Leute wieder zusammen.",
            points: { alkohol: 2, cannabis: 1 }
          },
          {
            text: "Du findest die Pause nicht schlimm und bleibst einfach entspannt sitzen.",
            points: { cannabis: 2, nikotin: 1 }
          },
          {
            text: "Du nutzt die Pause, checkst kurz dein Handy oder ziehst dich innerlich etwas zurück.",
            points: { nikotin: 2, kaffee: 1 }
          }
        ]
      },
      {
        text: "Du hast einen freien Nachmittag ohne Verpflichtungen. Wie sieht dein idealer Ablauf aus?",
        answers: [
          {
            text: "Du erledigst mehrere Dinge, triffst vielleicht noch jemanden und willst das Gefühl haben, etwas geschafft zu haben.",
            points: { kaffee: 2, nikotin: 1 }
          },
          {
            text: "Du lässt dich treiben, sagst zu spontanen Ideen ja und schaust, wohin der Tag kippt.",
            points: { alkohol: 2, cannabis: 1 }
          },
          {
            text: "Du machst es dir bequem, nimmst Tempo raus und willst möglichst wenig Reibung.",
            points: { cannabis: 2, alkohol: 1 }
          },
          {
            text: "Du brauchst kleine Unterbrechungen, kurze Reize und wechselst zwischen Ruhe und Aktivität.",
            points: { nikotin: 2, kaffee: 1 }
          }
        ]
      },
      {
        text: "Jemand erzählt dir von einem Problem und erwartet keine perfekte Lösung. Wie reagierst du?",
        answers: [
          {
            text: "Du analysierst schnell, sortierst die Lage und schlägst direkt den nächsten Schritt vor.",
            points: { kaffee: 2, nikotin: 1 }
          },
          {
            text: "Du versuchst, die Person auf andere Gedanken zu bringen und die Schwere aus der Situation zu nehmen.",
            points: { alkohol: 2, kaffee: 1 }
          },
          {
            text: "Du hörst ruhig zu, lässt Pausen stehen und gibst der Person Raum.",
            points: { cannabis: 2, alkohol: 1 }
          },
          {
            text: "Du bist aufmerksam, aber etwas unruhig und suchst nach einem kurzen Satz, der passt.",
            points: { nikotin: 2, cannabis: 1 }
          }
        ]
      },
      {
        text: "Du betrittst einen Raum, in dem du kaum jemanden kennst. Was passt am besten?",
        answers: [
          {
            text: "Du suchst dir schnell einen Einstieg und kommst über Fragen oder Beobachtungen ins Gespräch.",
            points: { kaffee: 2, alkohol: 1 }
          },
          {
            text: "Du gehst dorthin, wo schon gelacht wird, und dockst an die offenste Gruppe an.",
            points: { alkohol: 2, nikotin: 1 }
          },
          {
            text: "Du bleibst erst einmal ruhig, schaust dich um und wartest, bis sich etwas Natürliches ergibt.",
            points: { cannabis: 2, nikotin: 1 }
          },
          {
            text: "Du suchst dir einen sicheren Platz und brauchst kurz etwas, womit du dich beschäftigen kannst.",
            points: { nikotin: 2, kaffee: 1 }
          }
        ]
      },
      {
        text: "Bei einem gemeinsamen Projekt fehlt kurz vor Schluss noch einiges. Welche Rolle nimmst du ein?",
        answers: [
          {
            text: "Du ziehst das Tempo an, verteilst Aufgaben und willst den Rest effizient durchbringen.",
            points: { kaffee: 2, nikotin: 1 }
          },
          {
            text: "Du hältst die Stimmung oben, auch wenn es chaotisch wird, und motivierst die anderen.",
            points: { alkohol: 2, kaffee: 1 }
          },
          {
            text: "Du bleibst ruhig, arbeitest Schritt für Schritt weiter und lässt dich nicht verrückt machen.",
            points: { cannabis: 2, alkohol: 1 }
          },
          {
            text: "Du springst zwischen Aufgaben, reagierst schnell auf Kleinigkeiten und brauchst klare Zwischenziele.",
            points: { nikotin: 2, cannabis: 1 }
          }
        ]
      },
      {
        text: "Du bekommst eine Nachricht, die dich kurz irritiert. Was machst du am ehesten?",
        answers: [
          {
            text: "Du formulierst sofort eine klare Antwort und willst das Thema schnell vom Tisch haben.",
            points: { kaffee: 2, nikotin: 1 }
          },
          {
            text: "Du antwortest locker, vielleicht etwas überspielt, damit es nicht zu ernst wird.",
            points: { alkohol: 2, kaffee: 1 }
          },
          {
            text: "Du legst das Handy weg und wartest, bis du innerlich ruhiger bist.",
            points: { cannabis: 2, alkohol: 1 }
          },
          {
            text: "Du liest die Nachricht mehrmals, wechselst kurz die App und kommst dann wieder darauf zurück.",
            points: { nikotin: 2, cannabis: 1 }
          }
        ]
      },
      {
        text: "Welche Art von Kompliment würde am ehesten zu dir passen?",
        answers: [
          {
            text: "Mit dir kommt sofort Energie in die Sache.",
            points: { kaffee: 2, alkohol: 1 }
          },
          {
            text: "Mit dir wird sogar ein normaler Abend irgendwie besonderer.",
            points: { alkohol: 2, cannabis: 1 }
          },
          {
            text: "Bei dir fühlt sich vieles entspannter und weniger verkrampft an.",
            points: { cannabis: 2, nikotin: 1 }
          },
          {
            text: "Du merkst schnell, wenn sich eine Stimmung verändert.",
            points: { nikotin: 2, kaffee: 1 }
          }
        ]
      },
      {
        text: "Wenn dein Alltag ein Soundtrack wäre, welcher Vibe trifft ihn am ehesten?",
        answers: [
          {
            text: "Schneller Beat, klare Struktur, wenig Leerlauf.",
            points: { kaffee: 2, nikotin: 1 }
          },
          {
            text: "Locker, laut, mit einem Refrain, den alle irgendwann mitsingen.",
            points: { alkohol: 2, kaffee: 1 }
          },
          {
            text: "Warm, langsam, etwas verträumt und ohne harten Schnitt.",
            points: { cannabis: 2, alkohol: 1 }
          },
          {
            text: "Kurz, nervös, eingängig und immer wieder auf Repeat.",
            points: { nikotin: 2, cannabis: 1 }
          }
        ]
      }
    ]
  };

  const REQUIRED_TOP_LEVEL_FIELDS = ["title", "intro", "questions", "resultItems", "tieBreakOrder"];
  const REQUIRED_RESULT_FIELDS = ["id", "badge", "title", "links", "heroStyle"];
  const REQUIRED_LINK_FIELDS = ["slug", "title", "url"];
  const REQUIRED_QUESTION_FIELDS = ["text", "answers"];
  const REQUIRED_ANSWER_FIELDS = ["text", "points"];
  const ALLOWED_HERO_STYLES = ["low", "mild", "mid", "high"];

  const el = {
    wrap: document.getElementById("depTestWrap"),
    title: document.getElementById("depTestTitle"),
    intro: document.getElementById("depTestIntro"),
    error: document.getElementById("depTestError"),
    questions: document.getElementById("depTestQuestions"),
    submit: document.getElementById("depTestSubmit"),
    reset: document.getElementById("depTestReset"),
    result: document.getElementById("depTestResult"),
    resultHero: document.getElementById("depResultHero"),
    resultHeroMedia: document.getElementById("depResultHeroMedia"),
    resultHeroImage: document.getElementById("depResultHeroImage"),
    resultTitle: document.getElementById("depResultTitle"),
    scoreMeta: document.getElementById("depScoreMeta"),
    resultNote: document.getElementById("depResultNote"),
    links: document.getElementById("depLinks")
  };

  function showError(message) {
    el.error.style.display = "block";
    el.error.textContent = message;
  }

  function clearError() {
    el.error.style.display = "none";
    el.error.textContent = "";
  }

  function escapeHtml(str) {
    return String(str)
      .replace(/&/g, "&amp;")
      .replace(/</g, "&lt;")
      .replace(/>/g, "&gt;")
      .replace(/"/g, "&quot;")
      .replace(/'/g, "&#039;");
  }

  function isNonEmptyString(value) {
    return typeof value === "string" && value.trim() !== "";
  }

  function endsWithSlug(url, slug) {
    const cleanUrl = String(url).replace(/\/+$/, "");
    const cleanSlug = String(slug).replace(/^\/+|\/+$/g, "");
    return cleanUrl.endsWith("/" + cleanSlug);
  }

  function validateTopLevelFields(data) {
    for (const key of REQUIRED_TOP_LEVEL_FIELDS) {
      if (!(key in data)) {
        return "Fehler: In TEST_DATA fehlt das Pflichtfeld '" + key + "'.";
      }
    }

    if (!isNonEmptyString(data.title)) {
      return "Fehler: TEST_DATA.title ist leer oder ungültig.";
    }

    if (!isNonEmptyString(data.intro)) {
      return "Fehler: TEST_DATA.intro ist leer oder ungültig.";
    }

    if (!Array.isArray(data.resultItems) || data.resultItems.length < 2) {
      return "Fehler: TEST_DATA.resultItems muss mindestens 2 konkrete Ergebnisse enthalten.";
    }

    if (!Array.isArray(data.tieBreakOrder) || data.tieBreakOrder.length !== data.resultItems.length) {
      return "Fehler: TEST_DATA.tieBreakOrder muss alle Ergebnis-IDs genau einmal enthalten.";
    }

    if (!Array.isArray(data.questions) || data.questions.length !== 10) {
      return "Fehler: TEST_DATA.questions muss genau 10 Fragen enthalten.";
    }

    return null;
  }

  function validateResultItems(data) {
    const seenIds = new Set();

    for (let i = 0; i < data.resultItems.length; i++) {
      const result = data.resultItems[i];

      if (!result || typeof result !== "object" || Array.isArray(result)) {
        return "Fehler: TEST_DATA.resultItems[" + i + "] ist ungültig.";
      }

      for (const field of REQUIRED_RESULT_FIELDS) {
        if (!(field in result)) {
          return "Fehler: In TEST_DATA.resultItems[" + i + "] fehlt das Feld '" + field + "'.";
        }
      }

      if (!isNonEmptyString(result.id)) {
        return "Fehler: TEST_DATA.resultItems[" + i + "].id ist leer oder ungültig.";
      }

      if (seenIds.has(result.id)) {
        return "Fehler: Die Ergebnis-ID '" + result.id + "' ist doppelt vorhanden.";
      }

      if (!isNonEmptyString(result.badge)) {
        return "Fehler: TEST_DATA.resultItems[" + i + "].badge ist leer oder ungültig.";
      }

      if (!isNonEmptyString(result.title)) {
        return "Fehler: TEST_DATA.resultItems[" + i + "].title ist leer oder ungültig.";
      }

      if (!Array.isArray(result.links) || result.links.length < 2 || result.links.length > 3) {
        return "Fehler: TEST_DATA.resultItems[" + i + "].links muss 2 bis 3 weiterführende Tests enthalten.";
      }

      if (!isNonEmptyString(result.heroStyle) || !ALLOWED_HERO_STYLES.includes(result.heroStyle)) {
        return "Fehler: TEST_DATA.resultItems[" + i + "].heroStyle ist ungültig. Erlaubt sind: low, mild, mid, high.";
      }

      if ("image" in result && result.image !== null && !isNonEmptyString(result.image)) {
        return "Fehler: TEST_DATA.resultItems[" + i + "].image ist ungültig.";
      }

      if ("imageAlt" in result && result.imageAlt !== null && !isNonEmptyString(result.imageAlt)) {
        return "Fehler: TEST_DATA.resultItems[" + i + "].imageAlt ist ungültig.";
      }

      const seenSlugs = new Set();

      for (let j = 0; j < result.links.length; j++) {
        const link = result.links[j];

        if (!link || typeof link !== "object" || Array.isArray(link)) {
          return "Fehler: Ein Link in TEST_DATA.resultItems[" + i + "].links ist ungültig.";
        }

        for (const field of REQUIRED_LINK_FIELDS) {
          if (!(field in link)) {
            return "Fehler: In TEST_DATA.resultItems[" + i + "].links[" + j + "] fehlt das Feld '" + field + "'.";
          }
        }

        if (!isNonEmptyString(link.slug)) {
          return "Fehler: Ein Link in TEST_DATA.resultItems[" + i + "].links hat keinen gültigen Slug.";
        }

        if (!isNonEmptyString(link.title)) {
          return "Fehler: Ein Link in TEST_DATA.resultItems[" + i + "].links hat keinen gültigen Titel.";
        }

        if (!isNonEmptyString(link.url)) {
          return "Fehler: Ein Link in TEST_DATA.resultItems[" + i + "].links hat keine gültige URL.";
        }

        if (seenSlugs.has(link.slug)) {
          return "Fehler: In TEST_DATA.resultItems[" + i + "] gibt es doppelte Links mit dem Slug '" + link.slug + "'.";
        }

        if (!endsWithSlug(link.url, link.slug)) {
          return "Fehler: In TEST_DATA.resultItems[" + i + "] passt die URL nicht zum Slug '" + link.slug + "'.";
        }

        seenSlugs.add(link.slug);
      }

      seenIds.add(result.id);
    }

    return null;
  }

  function validateTieBreakOrder(data) {
    const resultIds = data.resultItems.map(item => item.id).sort();
    const tieBreakIds = data.tieBreakOrder.slice().sort();

    if (JSON.stringify(resultIds) !== JSON.stringify(tieBreakIds)) {
      return "Fehler: TEST_DATA.tieBreakOrder passt nicht exakt zu den IDs aus TEST_DATA.resultItems.";
    }

    return null;
  }

  function validateQuestions(data) {
    const validResultIds = new Set(data.resultItems.map(item => item.id));
    const reachableResultIds = new Set();

    for (let i = 0; i < data.questions.length; i++) {
      const question = data.questions[i];

      if (!question || typeof question !== "object" || Array.isArray(question)) {
        return "Fehler: Frage " + (i + 1) + " ist ungültig.";
      }

      for (const field of REQUIRED_QUESTION_FIELDS) {
        if (!(field in question)) {
          return "Fehler: In Frage " + (i + 1) + " fehlt das Feld '" + field + "'.";
        }
      }

      if (!isNonEmptyString(question.text)) {
        return "Fehler: Frage " + (i + 1) + " hat keinen gültigen Text.";
      }

      if (!Array.isArray(question.answers) || question.answers.length !== 4) {
        return "Fehler: Frage " + (i + 1) + " muss genau 4 Antworten haben.";
      }

      for (let j = 0; j < question.answers.length; j++) {
        const answer = question.answers[j];

        if (!answer || typeof answer !== "object" || Array.isArray(answer)) {
          return "Fehler: Frage " + (i + 1) + ", Antwort " + (j + 1) + " ist ungültig.";
        }

        for (const field of REQUIRED_ANSWER_FIELDS) {
          if (!(field in answer)) {
            return "Fehler: In Frage " + (i + 1) + ", Antwort " + (j + 1) + " fehlt das Feld '" + field + "'.";
          }
        }

        if (!isNonEmptyString(answer.text)) {
          return "Fehler: Frage " + (i + 1) + ", Antwort " + (j + 1) + " hat keinen gültigen Text.";
        }

        if (typeof answer.points !== "object" || answer.points === null || Array.isArray(answer.points)) {
          return "Fehler: Frage " + (i + 1) + ", Antwort " + (j + 1) + " braucht ein gültiges points-Objekt.";
        }

        const pointKeys = Object.keys(answer.points);

        if (pointKeys.length === 0) {
          return "Fehler: Frage " + (i + 1) + ", Antwort " + (j + 1) + " muss mindestens einem Ergebnis Punkte geben.";
        }

        for (const resultId of pointKeys) {
          if (!validResultIds.has(resultId)) {
            return "Fehler: Frage " + (i + 1) + ", Antwort " + (j + 1) + " verweist auf die unbekannte Ergebnis-ID '" + resultId + "'.";
          }

          const value = answer.points[resultId];

          if (!Number.isInteger(value) || value < 0) {
            return "Fehler: Frage " + (i + 1) + ", Antwort " + (j + 1) + " hat bei '" + resultId + "' keinen gültigen Punktwert.";
          }

          if (value > 0) {
            reachableResultIds.add(resultId);
          }
        }
      }
    }

    const unreachableIds = data.resultItems
      .map(item => item.id)
      .filter(id => !reachableResultIds.has(id));

    if (unreachableIds.length > 0) {
      return "Fehler: Diese Ergebnisse sind über keine Antwort erreichbar: " + unreachableIds.join(", ") + ".";
    }

    return null;
  }

  function validateTestData(data) {
    const topLevelError = validateTopLevelFields(data);
    if (topLevelError) {
      return topLevelError;
    }

    const resultItemsError = validateResultItems(data);
    if (resultItemsError) {
      return resultItemsError;
    }

    const tieBreakError = validateTieBreakOrder(data);
    if (tieBreakError) {
      return tieBreakError;
    }

    const questionsError = validateQuestions(data);
    if (questionsError) {
      return questionsError;
    }

    return null;
  }

  function renderQuestions(data, userAnswers) {
    let html = "";

    data.questions.forEach((question, qIndex) => {
      html += `
        <div class="dep-question">
          <div class="dep-question-title">${qIndex + 1}. ${escapeHtml(question.text)}</div>
      `;

      question.answers.forEach((answer, aIndex) => {
        const inputId = `depQ${qIndex}A${aIndex}`;

        html += `
          <label class="dep-answer" for="${inputId}">
            <input
              type="radio"
              id="${inputId}"
              name="depQ${qIndex}"
              value="${aIndex}"
              ${userAnswers[qIndex] === aIndex ? "checked" : ""}
            >
            <span class="dep-answer-text">${escapeHtml(answer.text)}</span>
          </label>
        `;
      });

      html += `</div>`;
    });

    el.questions.innerHTML = html;
  }

  function bindAnswerEvents(userAnswers) {
    const radioInputs = el.questions.querySelectorAll('input[type="radio"]');

    radioInputs.forEach(input => {
      input.addEventListener("change", function () {
        const qIndex = Number(this.name.replace("depQ", ""));
        userAnswers[qIndex] = Number(this.value);
        clearError();
      });
    });
  }

  function renderLinks(links) {
    return links.map(link => {
      return `
        <a class="dep-link-card" href="${escapeHtml(link.url)}" data-slug="${escapeHtml(link.slug)}">
          ${escapeHtml(link.title)}
        </a>
      `;
    }).join("");
  }

  function buildResultScores(data, userAnswers) {
    const scores = {};

    data.resultItems.forEach(item => {
      scores[item.id] = 0;
    });

    data.questions.forEach((question, qIndex) => {
      const selectedAnswerIndex = userAnswers[qIndex];
      const selectedAnswer = question.answers[selectedAnswerIndex];

      Object.keys(selectedAnswer.points).forEach(resultId => {
        scores[resultId] += selectedAnswer.points[resultId];
      });
    });

    return scores;
  }

  function getWinningResultId(scores, tieBreakOrder) {
    const maxScore = Math.max.apply(null, Object.values(scores));
    const candidates = Object.keys(scores).filter(resultId => scores[resultId] === maxScore);

    if (candidates.length === 1) {
      return candidates[0];
    }

    for (const resultId of tieBreakOrder) {
      if (candidates.includes(resultId)) {
        return resultId;
      }
    }

    return tieBreakOrder[0];
  }

  function getResultById(data, resultId) {
    return data.resultItems.find(item => item.id === resultId) || null;
  }

  function getHeroClassByStyle(heroStyle) {
    if (heroStyle === "low") return "dep-result-hero dep-result-hero--low";
    if (heroStyle === "mild") return "dep-result-hero dep-result-hero--mild";
    if (heroStyle === "mid") return "dep-result-hero dep-result-hero--mid";
    return "dep-result-hero dep-result-hero--high";
  }

  function resetHeroMedia() {
    el.resultHeroMedia.style.display = "none";
    el.resultHeroImage.removeAttribute("src");
    el.resultHeroImage.setAttribute("alt", "");
  }

  function renderHeroMedia(resultData) {
    if (isNonEmptyString(resultData.image)) {
      el.resultHeroImage.src = resultData.image;
      el.resultHeroImage.alt = isNonEmptyString(resultData.imageAlt) ? resultData.imageAlt : resultData.title;
      el.resultHeroMedia.style.display = "flex";
      return;
    }

    resetHeroMedia();
  }

  function resetTest(userAnswers) {
    for (let i = 0; i < userAnswers.length; i++) {
      userAnswers[i] = undefined;
    }

    const radioInputs = el.questions.querySelectorAll('input[type="radio"]');
    radioInputs.forEach(input => {
      input.checked = false;
    });

    clearError();
    el.result.style.display = "none";
    el.resultHero.className = "dep-result-hero";
    el.scoreMeta.textContent = "";
    el.scoreMeta.style.display = "none";
    el.resultNote.textContent = "";
    el.resultNote.style.display = "none";
    el.resultTitle.textContent = "";
    el.links.innerHTML = "";
    resetHeroMedia();
    el.wrap.scrollIntoView({ behavior: "smooth", block: "start" });
  }

  function renderResult(resultData) {
    el.resultHero.className = getHeroClassByStyle(resultData.heroStyle);
    renderHeroMedia(resultData);
    el.resultTitle.textContent = resultData.title;
    el.scoreMeta.textContent = resultData.badge;
    el.scoreMeta.style.display = "block";
    el.resultNote.textContent = "";
    el.resultNote.style.display = "none";
    el.links.innerHTML = renderLinks(resultData.links);

    el.result.style.display = "block";
    el.result.scrollIntoView({ behavior: "smooth", block: "start" });
  }

  function init() {
    const validationError = validateTestData(TEST_DATA);

    if (validationError) {
      showError(validationError);
      return;
    }

    clearError();

    el.title.textContent = TEST_DATA.title;
    el.intro.textContent = TEST_DATA.intro;
    el.scoreMeta.style.display = "none";
    el.resultNote.style.display = "none";
    resetHeroMedia();

    const userAnswers = new Array(TEST_DATA.questions.length).fill(undefined);

    renderQuestions(TEST_DATA, userAnswers);
    bindAnswerEvents(userAnswers);

    el.submit.addEventListener("click", function () {
      const unanswered = userAnswers
        .map((value, index) => value === undefined ? index + 1 : null)
        .filter(Boolean);

      if (unanswered.length > 0) {
        el.result.style.display = "none";
        showError("Bitte beantworte alle Fragen. Offen: " + unanswered.join(", "));
        el.error.scrollIntoView({ behavior: "smooth", block: "center" });
        return;
      }

      clearError();

      const scores = buildResultScores(TEST_DATA, userAnswers);
      const winningResultId = getWinningResultId(scores, TEST_DATA.tieBreakOrder);
      const resultData = getResultById(TEST_DATA, winningResultId);

      if (!resultData) {
        showError("Fehler: Das Ergebnis konnte nicht berechnet werden.");
        return;
      }

      renderResult(resultData);
    });

    el.reset.addEventListener("click", function () {
      resetTest(userAnswers);
    });
  }

  init();
})();
</script>
```
				</div>
					</div>
				</div>
				</div>
		]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Bist du Rick oder Morty?</title>
		<link>https://checkdich.at/category-fun/bist-du-rick-oder-morty-test/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Fri, 01 May 2026 17:12:23 +0000</pubDate>
				<category><![CDATA[Fun Tests]]></category>
		<guid isPermaLink="false">https://checkdich.at/?p=1705</guid>

					<description><![CDATA[Ergebnis anzeigen Zurücksetzen &#8222;` Passende nächste Tests &#8222;`]]></description>
			<style id="elementor-post-1705">.elementor-1705 .elementor-element.elementor-element-acacc88{--display:flex;--flex-direction:column;--container-widget-width:100%;--container-widget-height:initial;--container-widget-flex-grow:0;--container-widget-align-self:initial;--flex-wrap-mobile:wrap;}</style>							<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="1705" class="elementor elementor-1705" data-elementor-post-type="post">
				<div class="elementor-element elementor-element-acacc88 e-flex e-con-boxed e-con e-parent" data-id="acacc88" data-element_type="container" data-e-type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-5b99e16 elementor-widget elementor-widget-html" data-id="5b99e16" data-element_type="widget" data-e-type="widget" data-widget_type="html.default">
					<style>
.dep-test-wrap{
  max-width: 860px;
  margin: 32px auto;
  padding: 24px;
  background: #fff;
  border: 1px solid #e7ecf3;
  border-radius: 18px;
  box-shadow: 0 8px 24px rgba(15, 23, 42, 0.06);
  font-family: Arial, sans-serif;
  color: #1f2937;
}

.dep-test-header{
  margin-bottom: 24px;
}

.dep-test-title{
  margin: 0 0 10px 0;
  font-size: 30px;
  line-height: 1.2;
  font-weight: 700;
  color: #111827;
}

.dep-test-intro{
  margin: 0;
  font-size: 16px;
  line-height: 1.6;
  color: #4b5563;
}

.dep-test-error{
  display: none;
  margin: 0 0 22px 0;
  padding: 14px 16px;
  border: 1px solid #f3c2c2;
  background: #fff4f4;
  color: #9f1d1d;
  border-radius: 12px;
  font-size: 14px;
  line-height: 1.5;
}

.dep-question{
  margin-bottom: 22px;
  padding: 18px;
  border: 1px solid #e7ecf3;
  border-radius: 16px;
  background: #fbfcfe;
}

.dep-question-title{
  margin: 0 0 14px 0;
  font-size: 17px;
  line-height: 1.5;
  font-weight: 700;
  color: #111827;
}

.dep-answer{
  display: flex;
  align-items: center;
  gap: 10px;
  margin-top: 8px;
  padding: 12px 14px;
  border: 1px solid #dde5ef;
  border-radius: 12px;
  background: #fff;
  cursor: pointer;
  transition: border-color .18s ease, box-shadow .18s ease, background .18s ease;
}

.dep-answer:hover{
  border-color: #bfd0e6;
  background: #f8fbff;
}

.dep-answer input{
  margin: 0;
  flex: 0 0 auto;
}

.dep-answer-text{
  font-size: 15px;
  line-height: 1.45;
  color: #1f2937;
}

.dep-actions{
  margin-top: 24px;
}

.dep-btn{
  display: inline-block;
  width: 100%;
  border: 0;
  border-radius: 14px;
  padding: 15px 18px;
  background: #2563eb;
  color: #fff;
  font-size: 16px;
  font-weight: 700;
  cursor: pointer;
  transition: transform .15s ease, box-shadow .15s ease, background .15s ease;
  box-shadow: 0 10px 22px rgba(37, 99, 235, 0.18);
}

.dep-btn:hover{
  background: #1d4ed8;
}

.dep-btn:focus{
  outline: 3px solid rgba(37, 99, 235, 0.2);
  outline-offset: 2px;
}

.dep-btn:active{
  transform: translateY(1px);
}

.dep-btn-secondary{
  margin-top: 12px;
  background: #e5e7eb;
  color: #1f2937;
  box-shadow: none;
}

.dep-btn-secondary:hover{
  background: #dbe1e8;
}

.dep-result{
  display: none;
  margin-top: 30px;
  padding-top: 10px;
}

.dep-result-hero{
  padding: 24px 20px;
  border-radius: 18px;
  margin-bottom: 18px;
  text-align: center;
  border: 1px solid transparent;
}

.dep-result-hero--low{
  background: #eef6ff;
  border-color: #cfe3ff;
}

.dep-result-hero--mild{
  background: #f4f8ff;
  border-color: #d9e7ff;
}

.dep-result-hero--mid{
  background: #fff7e8;
  border-color: #f4ddb0;
}

.dep-result-hero--high{
  background: #fff0f0;
  border-color: #f1c6c6;
}

.dep-result-title{
  margin: 0;
  font-size: 31px;
  line-height: 1.15;
  font-weight: 800;
  color: #111827;
}

.dep-result-subtitle{
  margin: 12px auto 0 auto;
  max-width: 680px;
  font-size: 17px;
  line-height: 1.6;
  color: #374151;
}

.dep-card{
  margin-bottom: 14px;
  padding: 18px;
  border: 1px solid #e7ecf3;
  border-radius: 16px;
  background: #fff;
}

.dep-card-heading{
  margin: 0 0 10px 0;
  font-size: 15px;
  line-height: 1.3;
  font-weight: 800;
  letter-spacing: .02em;
  text-transform: uppercase;
  color: #475569;
}

.dep-card-text{
  font-size: 15px;
  line-height: 1.7;
  color: #1f2937;
}

.dep-card-text p{
  margin: 0 0 12px 0;
}

.dep-card-text p:last-child{
  margin-bottom: 0;
}

.dep-advice-list{
  margin: 0;
  padding-left: 18px;
}

.dep-advice-list li{
  margin: 0 0 8px 0;
  line-height: 1.6;
}

.dep-links-grid{
  display: grid;
  gap: 10px;
}

.dep-link-card{
  display: block;
  padding: 14px 16px;
  border: 1px solid #dbe5f0;
  border-radius: 14px;
  text-decoration: none;
  background: #f8fbff;
  color: #0f172a;
  font-weight: 700;
  transition: border-color .18s ease, transform .18s ease, background .18s ease;
}

.dep-link-card:hover{
  border-color: #bfd0e6;
  background: #f1f7ff;
  transform: translateY(-1px);
}

.dep-score-meta{
  margin-top: 16px;
  font-size: 18px;
  line-height: 1.4;
  font-weight: 700;
  color: #334155;
  text-align: center;
}

.dep-result-note{
  display: none;
  margin-top: 14px;
  font-size: 14px;
  line-height: 1.6;
  color: #475569;
  text-align: center;
}

.dep-result-hero-media{
  display: none;
  justify-content: center;
  align-items: center;
  margin: 0 0 14px 0;
}

.dep-result-hero-media img{
  display: block;
  max-width: 88px;
  max-height: 88px;
  width: auto;
  height: auto;
}

@media (max-width: 640px){
  .dep-test-wrap{
    padding: 18px;
    border-radius: 14px;
  }

  .dep-test-title{
    font-size: 25px;
  }

  .dep-result-title{
    font-size: 26px;
  }

  .dep-result-subtitle{
    font-size: 16px;
  }

  .dep-question{
    padding: 14px;
  }

  .dep-answer{
    padding: 11px 12px;
  }

  .dep-score-meta{
    font-size: 17px;
  }

  .dep-result-hero-media img{
    max-width: 76px;
    max-height: 76px;
  }
}
</style>

<div class="dep-test-wrap" id="depTestWrap">
  <div class="dep-test-header">
    <h1 class="dep-test-title" id="depTestTitle"></h1>
    <p class="dep-test-intro" id="depTestIntro"></p>
  </div>

  <div class="dep-test-error" id="depTestError"></div>

  <div id="depTestQuestions"></div>

  <div class="dep-actions">
    <button class="dep-btn" id="depTestSubmit" type="button">Ergebnis anzeigen</button>
    <button class="dep-btn dep-btn-secondary" id="depTestReset" type="button">Zurücksetzen</button>
  </div>

  <div class="dep-result" id="depTestResult">
    <div class="dep-result-hero" id="depResultHero">
      <div class="dep-result-hero-media" id="depResultHeroMedia">
        <img decoding="async" id="depResultHeroImage" src="" alt="">
      </div>
      <div class="dep-score-meta" id="depScoreMeta"></div>      
      <h3 class="dep-result-title" id="depResultTitle"></h3>
      <div class="dep-result-note" id="depResultNote"></div>
    </div>

```
<div class="dep-card">
  <div class="dep-card-heading">Passende nächste Tests</div>
  <div class="dep-links-grid" id="depLinks"></div>
</div>
```

  </div>
</div>

<script>
const TEST_DATA = {
  title: "Bist du Rick oder Morty?",
  intro: "In diesem Fun-Test findest du heraus, welcher Rick-and-Morty-Typ am ehesten zu dir passt. Dich erwarten spielerische Alltagssituationen mit klaren Entscheidungen statt ernster Selbstanalyse. Am Ende bekommst du ein konkretes Ergebnis: Jerry, Summer, Morty oder Rick.",
  tieBreakOrder: ["jerry", "summer", "morty", "rick"],
  resultItems: [
    {
      id: "jerry",
      badge: "Dein Ergebnis",
      title: "Du bist Jerry",
      heroStyle: "low",
      links: [
        {
          slug: "welches-pokemon-waerst-du-test",
          title: "Welches Pokémon wärst du?",
          url: "/fun-tests/welches-pokemon-waerst-du-test/"
        },
        {
          slug: "welche-hunderasse-waerst-du-test",
          title: "Welche Hunderasse wärst du?",
          url: "/fun-tests/welche-hunderasse-waerst-du-test/"
        },
        {
          slug: "welche-katzenrasse-waerst-du-test",
          title: "Welche Katzenrasse wärst du?",
          url: "/fun-tests/welche-katzenrasse-waerst-du-test/"
        }
      ]
    },
    {
      id: "summer",
      badge: "Dein Ergebnis",
      title: "Du bist Summer",
      heroStyle: "mild",
      links: [
        {
          slug: "welches-pokemon-waerst-du-test",
          title: "Welches Pokémon wärst du?",
          url: "/fun-tests/welches-pokemon-waerst-du-test/"
        },
        {
          slug: "welche-hunderasse-waerst-du-test",
          title: "Welche Hunderasse wärst du?",
          url: "/fun-tests/welche-hunderasse-waerst-du-test/"
        },
        {
          slug: "welche-katzenrasse-waerst-du-test",
          title: "Welche Katzenrasse wärst du?",
          url: "/fun-tests/welche-katzenrasse-waerst-du-test/"
        }
      ]
    },
    {
      id: "morty",
      badge: "Dein Ergebnis",
      title: "Du bist Morty",
      heroStyle: "mid",
      links: [
        {
          slug: "welches-pokemon-waerst-du-test",
          title: "Welches Pokémon wärst du?",
          url: "/fun-tests/welches-pokemon-waerst-du-test/"
        },
        {
          slug: "welche-hunderasse-waerst-du-test",
          title: "Welche Hunderasse wärst du?",
          url: "/fun-tests/welche-hunderasse-waerst-du-test/"
        },
        {
          slug: "welche-katzenrasse-waerst-du-test",
          title: "Welche Katzenrasse wärst du?",
          url: "/fun-tests/welche-katzenrasse-waerst-du-test/"
        }
      ]
    },
    {
      id: "rick",
      badge: "Dein Ergebnis",
      title: "Du bist Rick",
      heroStyle: "high",
      links: [
        {
          slug: "welches-pokemon-waerst-du-test",
          title: "Welches Pokémon wärst du?",
          url: "/fun-tests/welches-pokemon-waerst-du-test/"
        },
        {
          slug: "welche-hunderasse-waerst-du-test",
          title: "Welche Hunderasse wärst du?",
          url: "/fun-tests/welche-hunderasse-waerst-du-test/"
        },
        {
          slug: "welche-katzenrasse-waerst-du-test",
          title: "Welche Katzenrasse wärst du?",
          url: "/fun-tests/welche-katzenrasse-waerst-du-test/"
        }
      ]
    }
  ],
  questions: [
    {
      text: "Ein Portal geht in deinem Wohnzimmer auf. Was machst du als Erstes?",
      answers: [
        { text: "Ich frage, ob das sicher ist und ob wir nicht lieber die Tür schließen sollten.", points: { jerry: 2, morty: 1 } },
        { text: "Ich filme das kurz, poste es und springe dann als Erste durch.", points: { summer: 2, rick: 1 } },
        { text: "Ich bekomme Panik, gehe aber mit, weil es sonst noch schlimmer wird.", points: { morty: 2, jerry: 1 } },
        { text: "Ich werfe sofort ein Gerät hinein und teste, was auf der anderen Seite passiert.", points: { rick: 2, summer: 1 } }
      ]
    },
    {
      text: "In einer Gruppe muss spontan entschieden werden, wohin der Abend geht. Wie reagierst du?",
      answers: [
        { text: "Ich schlage vorsichtig etwas vor, ziehe meinen Vorschlag aber zurück, wenn niemand reagiert.", points: { jerry: 2, morty: 1 } },
        { text: "Ich entscheide schnell und sorge dafür, dass alle mitziehen.", points: { summer: 2, rick: 1 } },
        { text: "Ich will keinen Streit und nehme einfach das, was die Mehrheit will.", points: { morty: 2, jerry: 1 } },
        { text: "Ich zerlege erst alle schlechten Ideen und liefere dann die einzig sinnvolle Lösung.", points: { rick: 2, summer: 1 } }
      ]
    },
    {
      text: "Du bekommst eine Nachricht mit dem Betreff: 'Vertrau mir einfach'. Wie antwortest du?",
      answers: [
        { text: "Ich frage nach, ob das wirklich eine gute Idee ist, und hoffe auf eine beruhigende Antwort.", points: { jerry: 2, morty: 1 } },
        { text: "Ich schreibe: 'Bin dabei, aber nur wenn es nicht langweilig wird.'", points: { summer: 2, rick: 1 } },
        { text: "Ich sage zu, obwohl ich jetzt schon ein schlechtes Gefühl habe.", points: { morty: 2, jerry: 1 } },
        { text: "Ich antworte gar nicht, weil ich schon weiß, wie ich die Situation kontrolliere.", points: { rick: 2, summer: 1 } }
      ]
    },
    {
      text: "Ein Gerät von dir funktioniert nicht mehr. Wie gehst du damit um?",
      answers: [
        { text: "Ich drücke ein paar Tasten, werde unsicher und suche dann Hilfe.", points: { jerry: 2, morty: 1 } },
        { text: "Ich schaue kurz nach, probiere mutig etwas aus und tue notfalls so, als wäre es Absicht gewesen.", points: { summer: 2, rick: 1 } },
        { text: "Ich hoffe, dass jemand Kompetenteres das Problem übernimmt.", points: { morty: 2, jerry: 1 } },
        { text: "Ich schraube es auf, verbessere es und erkläre nebenbei, warum das Original schlecht gebaut war.", points: { rick: 2, summer: 1 } }
      ]
    },
    {
      text: "Jemand unterschätzt dich vor allen anderen. Was ist deine direkte Reaktion?",
      answers: [
        { text: "Ich lache unsicher mit und ärgere mich später darüber.", points: { jerry: 2, morty: 1 } },
        { text: "Ich kontere sofort und lasse klar erkennen, dass das keine gute Idee war.", points: { summer: 2, rick: 1 } },
        { text: "Ich werde nervös, will mich erklären und mache es dadurch eher schlimmer.", points: { morty: 2, jerry: 1 } },
        { text: "Ich nehme die Person in zwei Sätzen fachlich auseinander und gehe weiter.", points: { rick: 2, summer: 1 } }
      ]
    },
    {
      text: "Du findest heraus, dass Regeln in dieser Situation eigentlich nur bremsen. Was tust du?",
      answers: [
        { text: "Ich halte mich lieber daran, damit mir später niemand die Schuld gibt.", points: { jerry: 2, morty: 1 } },
        { text: "Ich breche sie, wenn es sich lohnt, und nehme das Drama in Kauf.", points: { summer: 2, rick: 1 } },
        { text: "Ich würde sie gern ignorieren, traue mich aber nur mit Rückendeckung.", points: { morty: 2, summer: 1 } },
        { text: "Ich ignoriere sie komplett, weil ich längst drei Schritte weiter denke.", points: { rick: 2, morty: 1 } }
      ]
    },
    {
      text: "Bei einem Familienessen kippt die Stimmung plötzlich. Welche Rolle nimmst du ein?",
      answers: [
        { text: "Ich versuche, nett zu wirken und irgendwie keinen zusätzlichen Ärger abzubekommen.", points: { jerry: 2, morty: 1 } },
        { text: "Ich sage offen, was alle denken, auch wenn danach kurz Chaos ist.", points: { summer: 2, rick: 1 } },
        { text: "Ich sitze dazwischen und hoffe, dass es schnell vorbei ist.", points: { morty: 2, jerry: 1 } },
        { text: "Ich beobachte alles trocken, mache eine präzise Bemerkung und dominiere den Raum.", points: { rick: 2, summer: 1 } }
      ]
    },
    {
      text: "Du musst mit sehr wenig Zeit ein Problem lösen. Worauf setzt du?",
      answers: [
        { text: "Auf eine einfache Lösung, die niemanden aufregt und halbwegs okay ist.", points: { jerry: 2, summer: 1 } },
        { text: "Auf Tempo, Mut und den Effekt, notfalls auch mit Risiko.", points: { summer: 2, rick: 1 } },
        { text: "Auf Improvisation und Glück, auch wenn ich innerlich komplett überfordert bin.", points: { morty: 2, jerry: 1 } },
        { text: "Auf die cleverste Lösung, auch wenn die anderen sie erst später kapieren.", points: { rick: 2, morty: 1 } }
      ]
    },
    {
      text: "Jemand bietet dir ein Abenteuer an, das ziemlich absurd klingt. Was überzeugt dich am ehesten?",
      answers: [
        { text: "Dass ich nicht allein bin und mir jemand sagt, dass schon nichts passieren wird.", points: { jerry: 2, morty: 1 } },
        { text: "Dass es wild, neu und später eine gute Story ist.", points: { summer: 2, morty: 1 } },
        { text: "Dass ich eigentlich nicht will, aber irgendwie trotzdem hineingezogen werde.", points: { morty: 2, jerry: 1 } },
        { text: "Dass ich dort Zugang zu Wissen, Technik oder einem klaren Vorteil bekomme.", points: { rick: 2, summer: 1 } }
      ]
    },
    {
      text: "Am Ende eines chaotischen Tages fragt jemand: 'Und, was hast du daraus gelernt?' Was passt am besten zu dir?",
      answers: [
        { text: "Dass ich mich beim nächsten Mal besser absichern sollte.", points: { jerry: 2, morty: 1 } },
        { text: "Dass man manchmal einfach machen muss, statt ewig zu überlegen.", points: { summer: 2, morty: 1 } },
        { text: "Dass ich mehr aushalte, als ich mir vorher zugetraut hätte.", points: { morty: 2, summer: 1 } },
        { text: "Dass die meisten Probleme berechenbar sind, wenn man schlau genug hinsieht.", points: { rick: 2, jerry: 1 } }
      ]
    }
  ]
};

(function () {
  "use strict";

  if (typeof TEST_DATA === "undefined") {
    const errorBox = document.getElementById("depTestError");
    errorBox.style.display = "block";
    errorBox.textContent = "Fehler: TEST_DATA wurde nicht gefunden. Die Engine braucht gültige Testdaten.";
    return;
  }

  const REQUIRED_TOP_LEVEL_FIELDS = ["title", "intro", "questions", "resultItems", "tieBreakOrder"];
  const REQUIRED_RESULT_FIELDS = ["id", "badge", "title", "links", "heroStyle"];
  const REQUIRED_LINK_FIELDS = ["slug", "title", "url"];
  const REQUIRED_QUESTION_FIELDS = ["text", "answers"];
  const REQUIRED_ANSWER_FIELDS = ["text", "points"];
  const ALLOWED_HERO_STYLES = ["low", "mild", "mid", "high"];

  const el = {
    wrap: document.getElementById("depTestWrap"),
    title: document.getElementById("depTestTitle"),
    intro: document.getElementById("depTestIntro"),
    error: document.getElementById("depTestError"),
    questions: document.getElementById("depTestQuestions"),
    submit: document.getElementById("depTestSubmit"),
    reset: document.getElementById("depTestReset"),
    result: document.getElementById("depTestResult"),
    resultHero: document.getElementById("depResultHero"),
    resultHeroMedia: document.getElementById("depResultHeroMedia"),
    resultHeroImage: document.getElementById("depResultHeroImage"),
    resultTitle: document.getElementById("depResultTitle"),
    scoreMeta: document.getElementById("depScoreMeta"),
    resultNote: document.getElementById("depResultNote"),
    links: document.getElementById("depLinks")
  };

  function showError(message) {
    el.error.style.display = "block";
    el.error.textContent = message;
  }

  function clearError() {
    el.error.style.display = "none";
    el.error.textContent = "";
  }

  function escapeHtml(str) {
    return String(str)
      .replace(/&/g, "&amp;")
      .replace(/</g, "&lt;")
      .replace(/>/g, "&gt;")
      .replace(/"/g, "&quot;")
      .replace(/'/g, "&#039;");
  }

  function isNonEmptyString(value) {
    return typeof value === "string" && value.trim() !== "";
  }

  function nl2p(text) {
    return String(text)
      .split(/\n{2,}/)
      .map(part => "<p>" + escapeHtml(part).replace(/\n/g, "<br>") + "</p>")
      .join("");
  }

  function endsWithSlug(url, slug) {
    const cleanUrl = String(url).replace(/\/+$/, "");
    const cleanSlug = String(slug).replace(/^\/+|\/+$/g, "");
    return cleanUrl.endsWith("/" + cleanSlug);
  }

  function validateTopLevelFields(data) {
    for (const key of REQUIRED_TOP_LEVEL_FIELDS) {
      if (!(key in data)) {
        return "Fehler: In TEST_DATA fehlt das Pflichtfeld '" + key + "'.";
      }
    }

    if (!isNonEmptyString(data.title)) {
      return "Fehler: TEST_DATA.title ist leer oder ungültig.";
    }

    if (!isNonEmptyString(data.intro)) {
      return "Fehler: TEST_DATA.intro ist leer oder ungültig.";
    }

    if (!Array.isArray(data.resultItems) || data.resultItems.length < 2) {
      return "Fehler: TEST_DATA.resultItems muss mindestens 2 konkrete Ergebnisse enthalten.";
    }

    if (!Array.isArray(data.tieBreakOrder) || data.tieBreakOrder.length !== data.resultItems.length) {
      return "Fehler: TEST_DATA.tieBreakOrder muss alle Ergebnis-IDs genau einmal enthalten.";
    }

    if (!Array.isArray(data.questions) || data.questions.length !== 10) {
      return "Fehler: TEST_DATA.questions muss genau 10 Fragen enthalten.";
    }

    return null;
  }

  function validateResultItems(data) {
    const seenIds = new Set();

    for (let i = 0; i < data.resultItems.length; i++) {
      const result = data.resultItems[i];

      if (!result || typeof result !== "object" || Array.isArray(result)) {
        return "Fehler: TEST_DATA.resultItems[" + i + "] ist ungültig.";
      }

      for (const field of REQUIRED_RESULT_FIELDS) {
        if (!(field in result)) {
          return "Fehler: In TEST_DATA.resultItems[" + i + "] fehlt das Feld '" + field + "'.";
        }
      }

      if (!isNonEmptyString(result.id)) {
        return "Fehler: TEST_DATA.resultItems[" + i + "].id ist leer oder ungültig.";
      }

      if (seenIds.has(result.id)) {
        return "Fehler: Die Ergebnis-ID '" + result.id + "' ist doppelt vorhanden.";
      }

      if (!isNonEmptyString(result.badge)) {
        return "Fehler: TEST_DATA.resultItems[" + i + "].badge ist leer oder ungültig.";
      }

      if (!isNonEmptyString(result.title)) {
        return "Fehler: TEST_DATA.resultItems[" + i + "].title ist leer oder ungültig.";
      }

      if (!Array.isArray(result.links) || result.links.length < 2 || result.links.length > 3) {
        return "Fehler: TEST_DATA.resultItems[" + i + "].links muss 2 bis 3 weiterführende Tests enthalten.";
      }

      if (!isNonEmptyString(result.heroStyle) || !ALLOWED_HERO_STYLES.includes(result.heroStyle)) {
        return "Fehler: TEST_DATA.resultItems[" + i + "].heroStyle ist ungültig. Erlaubt sind: low, mild, mid, high.";
      }

      if ("image" in result && result.image !== null && !isNonEmptyString(result.image)) {
        return "Fehler: TEST_DATA.resultItems[" + i + "].image ist ungültig.";
      }

      if ("imageAlt" in result && result.imageAlt !== null && !isNonEmptyString(result.imageAlt)) {
        return "Fehler: TEST_DATA.resultItems[" + i + "].imageAlt ist ungültig.";
      }

      const seenSlugs = new Set();

      for (let j = 0; j < result.links.length; j++) {
        const link = result.links[j];

        if (!link || typeof link !== "object" || Array.isArray(link)) {
          return "Fehler: Ein Link in TEST_DATA.resultItems[" + i + "].links ist ungültig.";
        }

        for (const field of REQUIRED_LINK_FIELDS) {
          if (!(field in link)) {
            return "Fehler: In TEST_DATA.resultItems[" + i + "].links[" + j + "] fehlt das Feld '" + field + "'.";
          }
        }

        if (!isNonEmptyString(link.slug)) {
          return "Fehler: Ein Link in TEST_DATA.resultItems[" + i + "].links hat keinen gültigen Slug.";
        }

        if (!isNonEmptyString(link.title)) {
          return "Fehler: Ein Link in TEST_DATA.resultItems[" + i + "].links hat keinen gültigen Titel.";
        }

        if (!isNonEmptyString(link.url)) {
          return "Fehler: Ein Link in TEST_DATA.resultItems[" + i + "].links hat keine gültige URL.";
        }

        if (seenSlugs.has(link.slug)) {
          return "Fehler: In TEST_DATA.resultItems[" + i + "] gibt es doppelte Links mit dem Slug '" + link.slug + "'.";
        }

        if (!endsWithSlug(link.url, link.slug)) {
          return "Fehler: In TEST_DATA.resultItems[" + i + "] passt die URL nicht zum Slug '" + link.slug + "'.";
        }

        seenSlugs.add(link.slug);
      }

      seenIds.add(result.id);
    }

    return null;
  }

  function validateTieBreakOrder(data) {
    const resultIds = data.resultItems.map(item => item.id).sort();
    const tieBreakIds = data.tieBreakOrder.slice().sort();

    if (JSON.stringify(resultIds) !== JSON.stringify(tieBreakIds)) {
      return "Fehler: TEST_DATA.tieBreakOrder passt nicht exakt zu den IDs aus TEST_DATA.resultItems.";
    }

    return null;
  }

  function validateQuestions(data) {
    const validResultIds = new Set(data.resultItems.map(item => item.id));
    const reachableResultIds = new Set();

    for (let i = 0; i < data.questions.length; i++) {
      const question = data.questions[i];

      if (!question || typeof question !== "object" || Array.isArray(question)) {
        return "Fehler: Frage " + (i + 1) + " ist ungültig.";
      }

      for (const field of REQUIRED_QUESTION_FIELDS) {
        if (!(field in question)) {
          return "Fehler: In Frage " + (i + 1) + " fehlt das Feld '" + field + "'.";
        }
      }

      if (!isNonEmptyString(question.text)) {
        return "Fehler: Frage " + (i + 1) + " hat keinen gültigen Text.";
      }

      if (!Array.isArray(question.answers) || question.answers.length !== 4) {
        return "Fehler: Frage " + (i + 1) + " muss genau 4 Antworten haben.";
      }

      for (let j = 0; j < question.answers.length; j++) {
        const answer = question.answers[j];

        if (!answer || typeof answer !== "object" || Array.isArray(answer)) {
          return "Fehler: Frage " + (i + 1) + ", Antwort " + (j + 1) + " ist ungültig.";
        }

        for (const field of REQUIRED_ANSWER_FIELDS) {
          if (!(field in answer)) {
            return "Fehler: In Frage " + (i + 1) + ", Antwort " + (j + 1) + " fehlt das Feld '" + field + "'.";
          }
        }

        if (!isNonEmptyString(answer.text)) {
          return "Fehler: Frage " + (i + 1) + ", Antwort " + (j + 1) + " hat keinen gültigen Text.";
        }

        if (typeof answer.points !== "object" || answer.points === null || Array.isArray(answer.points)) {
          return "Fehler: Frage " + (i + 1) + ", Antwort " + (j + 1) + " braucht ein gültiges points-Objekt.";
        }

        const pointKeys = Object.keys(answer.points);

        if (pointKeys.length === 0) {
          return "Fehler: Frage " + (i + 1) + ", Antwort " + (j + 1) + " muss mindestens einem Ergebnis Punkte geben.";
        }

        for (const resultId of pointKeys) {
          if (!validResultIds.has(resultId)) {
            return "Fehler: Frage " + (i + 1) + ", Antwort " + (j + 1) + " verweist auf die unbekannte Ergebnis-ID '" + resultId + "'.";
          }

          const value = answer.points[resultId];

          if (!Number.isInteger(value) || value < 0) {
            return "Fehler: Frage " + (i + 1) + ", Antwort " + (j + 1) + " hat bei '" + resultId + "' keinen gültigen Punktwert.";
          }

          if (value > 0) {
            reachableResultIds.add(resultId);
          }
        }
      }
    }

    const unreachableIds = data.resultItems
      .map(item => item.id)
      .filter(id => !reachableResultIds.has(id));

    if (unreachableIds.length > 0) {
      return "Fehler: Diese Ergebnisse sind über keine Antwort erreichbar: " + unreachableIds.join(", ") + ".";
    }

    return null;
  }

  function validateTestData(data) {
    const topLevelError = validateTopLevelFields(data);
    if (topLevelError) {
      return topLevelError;
    }

    const resultItemsError = validateResultItems(data);
    if (resultItemsError) {
      return resultItemsError;
    }

    const tieBreakError = validateTieBreakOrder(data);
    if (tieBreakError) {
      return tieBreakError;
    }

    const questionsError = validateQuestions(data);
    if (questionsError) {
      return questionsError;
    }

    return null;
  }

  function renderQuestions(data, userAnswers) {
    let html = "";

    data.questions.forEach((question, qIndex) => {
      html += `
        <div class="dep-question">
          <div class="dep-question-title">${qIndex + 1}. ${escapeHtml(question.text)}</div>
      `;

      question.answers.forEach((answer, aIndex) => {
        const inputId = `depQ${qIndex}A${aIndex}`;

        html += `
          <label class="dep-answer" for="${inputId}">
            <input
              type="radio"
              id="${inputId}"
              name="depQ${qIndex}"
              value="${aIndex}"
              ${userAnswers[qIndex] === aIndex ? "checked" : ""}
            >
            <span class="dep-answer-text">${escapeHtml(answer.text)}</span>
          </label>
        `;
      });

      html += `</div>`;
    });

    el.questions.innerHTML = html;
  }

  function bindAnswerEvents(userAnswers) {
    const radioInputs = el.questions.querySelectorAll('input[type="radio"]');

    radioInputs.forEach(input => {
      input.addEventListener("change", function () {
        const qIndex = Number(this.name.replace("depQ", ""));
        userAnswers[qIndex] = Number(this.value);
        clearError();
      });
    });
  }

  function renderTraitsList(items) {
    const lis = items.map(item => "<li>" + escapeHtml(item) + "</li>").join("");
    return '<ul class="dep-advice-list">' + lis + "</ul>";
  }

  function renderLinks(links) {
    return links.map(link => {
      return `
        <a class="dep-link-card" href="${escapeHtml(link.url)}" data-slug="${escapeHtml(link.slug)}">
          ${escapeHtml(link.title)}
        </a>
      `;
    }).join("");
  }

  function buildResultScores(data, userAnswers) {
    const scores = {};

    data.resultItems.forEach(item => {
      scores[item.id] = 0;
    });

    data.questions.forEach((question, qIndex) => {
      const selectedAnswerIndex = userAnswers[qIndex];
      const selectedAnswer = question.answers[selectedAnswerIndex];

      Object.keys(selectedAnswer.points).forEach(resultId => {
        scores[resultId] += selectedAnswer.points[resultId];
      });
    });

    return scores;
  }

  function getWinningResultId(scores, tieBreakOrder) {
    const maxScore = Math.max.apply(null, Object.values(scores));
    const candidates = Object.keys(scores).filter(resultId => scores[resultId] === maxScore);

    if (candidates.length === 1) {
      return candidates[0];
    }

    for (const resultId of tieBreakOrder) {
      if (candidates.includes(resultId)) {
        return resultId;
      }
    }

    return tieBreakOrder[0];
  }

  function getResultById(data, resultId) {
    return data.resultItems.find(item => item.id === resultId) || null;
  }

  function getHeroClassByStyle(heroStyle) {
    if (heroStyle === "low") return "dep-result-hero dep-result-hero--low";
    if (heroStyle === "mild") return "dep-result-hero dep-result-hero--mild";
    if (heroStyle === "mid") return "dep-result-hero dep-result-hero--mid";
    return "dep-result-hero dep-result-hero--high";
  }

  function resetHeroMedia() {
    el.resultHeroMedia.style.display = "none";
    el.resultHeroImage.removeAttribute("src");
    el.resultHeroImage.setAttribute("alt", "");
  }

  function renderHeroMedia(resultData) {
    if (isNonEmptyString(resultData.image)) {
      el.resultHeroImage.src = resultData.image;
      el.resultHeroImage.alt = isNonEmptyString(resultData.imageAlt) ? resultData.imageAlt : resultData.title;
      el.resultHeroMedia.style.display = "flex";
      return;
    }

    resetHeroMedia();
  }

  function resetTest(userAnswers) {
    for (let i = 0; i < userAnswers.length; i++) {
      userAnswers[i] = undefined;
    }

    const radioInputs = el.questions.querySelectorAll('input[type="radio"]');
    radioInputs.forEach(input => {
      input.checked = false;
    });

    clearError();
    el.result.style.display = "none";
    el.resultHero.className = "dep-result-hero";
    el.scoreMeta.textContent = "";
    el.scoreMeta.style.display = "none";
    el.resultNote.textContent = "";
    el.resultNote.style.display = "none";
    el.resultTitle.textContent = "";
    el.links.innerHTML = "";
    resetHeroMedia();
    el.wrap.scrollIntoView({ behavior: "smooth", block: "start" });
  }

  function renderResult(resultData) {
    el.resultHero.className = getHeroClassByStyle(resultData.heroStyle);
    renderHeroMedia(resultData);
    el.resultTitle.textContent = resultData.title;
   
    el.scoreMeta.textContent = resultData.badge;
    el.scoreMeta.style.display = "block";
    el.resultNote.textContent = "";
    el.resultNote.style.display = "none";
    el.links.innerHTML = renderLinks(resultData.links);

    el.result.style.display = "block";
    el.result.scrollIntoView({ behavior: "smooth", block: "start" });
  }

  function init() {
    const validationError = validateTestData(TEST_DATA);

    if (validationError) {
      showError(validationError);
      return;
    }

    clearError();

    el.title.textContent = TEST_DATA.title;
    el.intro.textContent = TEST_DATA.intro;
    el.scoreMeta.style.display = "none";
    el.resultNote.style.display = "none";
    resetHeroMedia();

    const userAnswers = new Array(TEST_DATA.questions.length).fill(undefined);

    renderQuestions(TEST_DATA, userAnswers);
    bindAnswerEvents(userAnswers);

    el.submit.addEventListener("click", function () {
      const unanswered = userAnswers
        .map((value, index) => value === undefined ? index + 1 : null)
        .filter(Boolean);

      if (unanswered.length > 0) {
        el.result.style.display = "none";
        showError("Bitte beantworte alle Fragen. Offen: " + unanswered.join(", "));
        el.error.scrollIntoView({ behavior: "smooth", block: "center" });
        return;
      }

      clearError();

      const scores = buildResultScores(TEST_DATA, userAnswers);
      const winningResultId = getWinningResultId(scores, TEST_DATA.tieBreakOrder);
      const resultData = getResultById(TEST_DATA, winningResultId);

      if (!resultData) {
        showError("Fehler: Das Ergebnis konnte nicht berechnet werden.");
        return;
      }

      renderResult(resultData);
    });

    el.reset.addEventListener("click", function () {
      resetTest(userAnswers);
    });
  }

  init();
})();
</script>
				</div>
					</div>
				</div>
				</div>
		]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
