{"id":9356,"date":"2026-01-07T15:08:02","date_gmt":"2026-01-07T14:08:02","guid":{"rendered":"https:\/\/paulinagreen.com\/?page_id=9356"},"modified":"2026-06-25T17:57:19","modified_gmt":"2026-06-25T15:57:19","slug":"home-and-trial-chat-page-paulina","status":"publish","type":"page","link":"https:\/\/paulinagreen.com\/en\/","title":{"rendered":"Home and Trial Chat Page Paulina"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"9356\" class=\"elementor elementor-9356\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-90c4399 e-flex e-con-boxed e-con e-parent\" data-id=\"90c4399\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9edc00f elementor-align-center elementor-icon-list--layout-traditional elementor-list-item-link-full_width elementor-widget elementor-widget-icon-list\" data-id=\"9edc00f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-list.default\">\n\t\t\t\t\t\t\t<ul class=\"elementor-icon-list-items\">\n\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\"><span>Sag Paulina dein Thema. <\/span><\/span>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t<\/ul>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a8a9f48 elementor-align-center elementor-icon-list--layout-traditional elementor-list-item-link-full_width elementor-widget elementor-widget-icon-list\" data-id=\"a8a9f48\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-list.default\">\n\t\t\t\t\t\t\t<ul class=\"elementor-icon-list-items\">\n\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\"><span>Sie plant und erstellt f\u00fcr <\/span><span>deinen Schulalltag. <\/span><\/span>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t<\/ul>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cf7833f elementor-widget__width-inherit elementor-widget elementor-widget-html\" data-id=\"cf7833f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- Paulina Chat - unregistered Version - Buttons oben - Stand 19.5.2026 -->\n<div id=\"paulina-chat\" class=\"pg-shell\" aria-label=\"Paulina Chat\">\n  <div class=\"pg-frame\">\n    <button id=\"pg-reset\" type=\"button\" class=\"pg-reset\" aria-label=\"Start over\">\n      <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\"\/><path d=\"M21 3v5h-5\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\"\/><\/svg>\n      <span>Reset<\/span>\n    <\/button>\n    <div id=\"pg-tagline\" class=\"pg-tagline\"><\/div>\n    <div id=\"pg-log\" class=\"pg-log\" role=\"log\" aria-live=\"polite\" aria-relevant=\"additions text\"><\/div>\n    <div class=\"pg-hints\">\n      <button type=\"button\" class=\"pg-hint\" data-pg-utter=\"I need to plan a lesson\" data-pg-intent=\"planning\">\n        <svg class=\"pg-hint-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M3 10h18M8 2v4M16 2v4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"\/><\/svg>\n        <span>Jahres- & Themenplan<\/span>\n      <\/button>\n      <button type=\"button\" class=\"pg-hint\" data-pg-utter=\"I need to create teaching material\" data-pg-intent=\"material\">\n        <svg class=\"pg-hint-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M12 19l7-7 3 3-7 7-3-3z\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><path d=\"M18 13l-1.5-7.5L2 2l3.5 14.5L13 18l5-5z\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><path d=\"M2 2l7.586 7.586\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"\/><circle cx=\"11\" cy=\"11\" r=\"2\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg>\n        <span>Stundeninhalte<\/span>\n      <\/button>\n      <button type=\"button\" class=\"pg-hint\" data-pg-utter=\"I need quick help for tomorrow\" data-pg-intent=\"emergency\">\n        <svg class=\"pg-hint-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M12 6v6l4 2\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"\/><\/svg>\n        <span>Stunde retten<\/span>\n      <\/button>\n    <\/div>\n    <div class=\"pg-or-divider\">oder schreib direkt \u2013 in deiner Sprache:<\/div>\n    <form id=\"pg-form\" class=\"pg-composer\" autocomplete=\"off\">\n      <input id=\"pg-file\" type=\"file\" hidden accept=\".pdf,.docx,.pptx,.xlsx,.txt\" \/>\n      <button id=\"pg-clip\" type=\"button\" class=\"pg-pill pg-circle\" title=\"Add file\" aria-label=\"Add file\">\n        <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M12 5v14M5 12h14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\/><\/svg>\n      <\/button>\n      <textarea id=\"pg-input\" rows=\"1\" class=\"pg-input\" placeholder=\"Schreib hier...\" aria-label=\"Message to Paulina\"><\/textarea>\n      <button id=\"pg-send\" type=\"submit\" class=\"pg-pill pg-circle\" aria-label=\"Send\">\n        <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5 12h12M13 6l6 6-6 6\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg>\n      <\/button>\n    <\/form>\n    <div class=\"pg-whisper\"> <\/div>\n    <div class=\"pg-status-bar\"><span id=\"pg-status\" class=\"pg-status\" aria-live=\"polite\"><\/span><\/div>\n  <\/div>\n<\/div>\n\n<style>\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Poppins:wght@300;400;500;600&display=swap');\n\n#paulina-chat.pg-shell {\n  position: relative; z-index: 9; max-width: 100%; margin: 0 auto; padding: 25px; padding-top: 20px; width: 100%;\n  --ink: #012345; --text: #012345; --muted: #9ca3af; --border: #e4e8ee; --bg: #ffffff;\n  --bot: #f0f5f1; --bot-border: #c8ddd0; --user: #eef6ee; --user-border: #d8e8d8;\n  --accent: #2D5A3D; --accent-light: #EAF0E8;\n  font-family: 'Poppins', -apple-system, sans-serif;\n  box-sizing: border-box;\n}\n#paulina-chat *, #paulina-chat *::before, #paulina-chat *::after { box-sizing: border-box; }\n\n#paulina-chat .pg-frame {\n  position: relative; width: 100%; max-width: 100%; background: var(--bg);\n  border: 1px solid var(--border); border-radius: 20px; box-shadow: 0 4px 16px rgba(0,0,0,.08);\n  padding: 24px; margin: 0;\n  display: flex; flex-direction: column;\n  min-height: 450px;\n}\n\n#paulina-chat .pg-reset {\n  align-self: flex-start;\n  -webkit-appearance: none; appearance: none;\n  background: transparent; border: none; box-shadow: none;\n  color: var(--muted); border-radius: 999px; padding: 8px 14px;\n  font-size: 16px; font-weight: 600;\n  cursor: pointer; transition: all 0.15s ease;\n  display: inline-flex; align-items: center; gap: 6px;\n  font-family: 'Poppins', -apple-system, sans-serif !important;\n  margin-bottom: 12px;\n}\n#paulina-chat .pg-reset svg { width: 16px; height: 16px; flex-shrink: 0; }\n#paulina-chat .pg-reset:hover { background: #EF9F27; color: var(--ink); box-shadow: 0 4px 14px rgba(239, 159, 39, 0.33); }\n#paulina-chat .pg-reset:active { transform: translateY(1px); }\n\n#paulina-chat .pg-tagline {\n  font-family: 'Poppins', sans-serif;\n  font-size: 28px; font-weight: 300; color: #9ca3af;\n  text-align: center; line-height: 1.4;\n  padding: 16px 20px; margin: 0 auto 8px;\n  max-width: 600px;\n  transition: opacity 0.3s ease;\n}\n#paulina-chat .pg-tagline.pg-hidden { display: none; }\n\n#paulina-chat .pg-log {\n  min-height: 0; max-height: 55vh; overflow-y: auto; overflow-x: hidden;\n  display: flex; flex-direction: column; gap: 16px; scroll-behavior: smooth;\n}\n#paulina-chat .pg-log:not(:empty) { padding: 8px 0 16px; }\n\n#paulina-chat .pg-bubble {\n  max-width: 85%; min-width: 120px; white-space: pre-wrap; word-break: break-word; border-radius: 20px;\n  padding: 16px 20px; line-height: 1.6; font-size: 16px; box-shadow: 0 2px 6px rgba(0,0,0,.06);\n  animation: pg-fadein 0.15s ease forwards;\n}\n#paulina-chat .pg-bubble:empty, #paulina-chat .pg-bubble[data-empty=\"true\"] {\n  display: none !important; padding: 0 !important; border: none !important;\n  box-shadow: none !important; margin: 0 !important;\n}\n#paulina-chat .pg-row:has(.pg-bubble:empty) { display: none !important; }\n#paulina-chat .pg-bot { background: var(--bot); border: 1px solid var(--bot-border); border-top-left-radius: 6px; }\n#paulina-chat .pg-user { background: var(--user); border: 1px solid var(--user-border); border-top-right-radius: 6px; margin-left: auto; }\n#paulina-chat .pg-bubble.pg-flat {\n  background: transparent !important; border: 0 !important; box-shadow: none !important;\n  padding: 0 !important; margin: 8px 0 0 !important;\n}\n#paulina-chat .pg-bubble.pg-flat a { color: var(--accent) !important; text-decoration: underline; text-underline-offset: 2px; font-weight: 600 !important; font-size: 15px; }\n#paulina-chat .pg-bubble.pg-flat a:hover { color: #5a3cb8 !important; }\n#paulina-chat .pg-row { display: flex; }\n#paulina-chat .pg-row.pg-left { justify-content: flex-start; }\n#paulina-chat .pg-row.pg-right { justify-content: flex-end; }\n\n#paulina-chat .pg-followup-buttons { display: flex; flex-direction: column; gap: 10px; margin-top: 16px; max-width: 85%; }\n#paulina-chat .pg-followup-btn {\n  -webkit-appearance: none; appearance: none; background: #fff; border: 1.5px solid var(--border);\n  color: var(--ink); border-radius: 12px; padding: 14px 18px; font-size: 14px; font-weight: 500;\n  cursor: pointer; transition: all 0.15s ease; text-align: left; line-height: 1.4;\n  white-space: normal; word-wrap: break-word;\n}\n#paulina-chat .pg-followup-btn:hover { background: var(--accent-light); border-color: var(--accent); color: var(--accent); }\n#paulina-chat .pg-followup-btn:active { transform: translateY(1px); }\n#paulina-chat .pg-followup-btn.pg-primary { background: var(--accent); border-color: var(--accent); color: #fff; font-weight: 600; }\n#paulina-chat .pg-followup-btn.pg-primary:hover { background: #5a3cb8; border-color: #5a3cb8; color: #fff; }\n#paulina-chat .pg-followup-btn.pg-tertiary { background: transparent; border: none; color: var(--muted); font-size: 13px; padding: 8px 0; text-decoration: underline; text-underline-offset: 2px; }\n#paulina-chat .pg-followup-btn.pg-tertiary:hover { color: var(--ink); background: transparent; }\n\n#paulina-chat .pg-hints { display: flex; justify-content: center; flex-wrap: wrap; gap: 12px; margin-top: 8px; }\n#paulina-chat .pg-hint {\n  -webkit-appearance: none; appearance: none; background: #fff; border: 1px solid var(--border);\n  box-shadow: 0 3px 12px rgba(239, 159, 39, 0.3); color: var(--ink); border-radius: 999px;\n  padding: 12px 20px; font-size: 14px; font-weight: 600; cursor: pointer; transition: all 0.15s ease;\n  display: flex; align-items: center; gap: 8px;\n}\n#paulina-chat .pg-hint-icon { width: 20px; height: 20px; flex-shrink: 0; opacity: 0.7; }\n#paulina-chat .pg-hint:hover { background: var(--accent-light); border-color: var(--accent); color: var(--accent); }\n#paulina-chat .pg-hint:hover .pg-hint-icon { opacity: 1; }\n#paulina-chat .pg-hint:active { transform: translateY(1px); }\n\n#paulina-chat .pg-or-divider {\n  text-align: center; font-size: 14px; font-weight: 500; color: var(--muted);\n  margin-top: 24px; margin-bottom: 12px;\n}\n\n#paulina-chat .pg-switch-hint {\n  -webkit-appearance: none; appearance: none;\n  background: transparent; border: none; box-shadow: none;\n  color: var(--muted); padding: 12px 0; font-size: 13px;\n  cursor: pointer; text-decoration: underline; text-underline-offset: 2px;\n  text-align: center; margin-top: 8px; width: 100%;\n  font-family: 'Poppins', -apple-system, sans-serif;\n  transition: color 0.15s ease;\n}\n#paulina-chat .pg-switch-hint:hover { color: var(--accent); }\n\n#paulina-chat, #paulina-chat *, #paulina-chat input, #paulina-chat textarea, #paulina-chat button, #paulina-chat select { font-family: 'Poppins', -apple-system, sans-serif !important; }\n\n#paulina-chat .pg-composer {\n  display: flex; align-items: center; gap: 12px; padding: 10px; border: 1px solid var(--border);\n  border-radius: 999px; background: #fff; box-shadow: 0 2px 12px rgba(0,0,0,.06);\n}\n\n\/* Dialog-Zustand: Eingabefeld \u00fcber die Buttons, wenn Chat l\u00e4uft *\/\n#paulina-chat .pg-frame.pg-chatting .pg-composer { order: 1; }\n#paulina-chat .pg-frame.pg-chatting .pg-or-divider { order: 2; }\n#paulina-chat .pg-frame.pg-chatting .pg-hints { order: 3; }\n\n#paulina-chat .pg-input {\n  flex: 1; border: 0; outline: 0; resize: none; height: 44px; padding: 12px 14px; font-size: 16px;\n  font-family: 'Poppins', -apple-system, sans-serif;\n  color: var(--text); background: transparent; line-height: 1.5;\n}\n#paulina-chat .pg-input::placeholder { color: var(--muted); font-weight: 400; }\n#paulina-chat .pg-pill { background: transparent; color: var(--ink); border: 1px solid var(--border); box-shadow: none; cursor: pointer; transition: all 0.15s ease; flex-shrink: 0; }\n#paulina-chat .pg-pill:hover { background: var(--accent-light); border-color: var(--accent); }\n#paulina-chat .pg-pill:active { transform: scale(0.96); }\n#paulina-chat .pg-circle { width: 50px; height: 50px; border-radius: 50%; display: flex; align-items: center; justify-content: center; padding: 0; }\n#paulina-chat .pg-circle svg { width: 22px; height: 22px; stroke-width: 2; }\n#paulina-chat .pg-whisper { text-align: center; font-size: 13px; color: #a8b0bc; margin-top: 14px; font-style: italic; }\n\n#paulina-chat .pg-status-bar { text-align: center; margin-top: 10px; min-height: 20px; }\n#paulina-chat .pg-status { font-size: 14px; color: var(--muted); }\n\n#paulina-chat .pg-typing {\n  background: var(--bot); border: 1px solid var(--bot-border); border-radius: 20px;\n  padding: 12px 16px; color: var(--muted); display: inline-flex; gap: 8px; align-items: center;\n}\n#paulina-chat .pg-dots { display: inline-flex; gap: 5px; }\n#paulina-chat .pg-dots i { width: 7px; height: 7px; border-radius: 50%; background: currentColor; opacity: 0.4; display: block; animation: pg-pulse 1.2s infinite ease-in-out; }\n#paulina-chat .pg-dots i:nth-child(2) { animation-delay: .15s; }\n#paulina-chat .pg-dots i:nth-child(3) { animation-delay: .3s; }\n@keyframes pg-fadein { from { opacity: 0; } to { opacity: 1; } }\n@keyframes pg-pulse { 0%, 80%, 100% { opacity: 0.3; transform: translateY(0); } 40% { opacity: 1; transform: translateY(-2px); } }\n\n\/* ===== TABLET (iPad) ===== *\/\n@media (max-width: 768px) {\n  #paulina-chat .pg-frame { padding: 22px; border-radius: 16px; }\n  #paulina-chat .pg-reset { font-size: 15px; padding: 7px 12px; margin-bottom: 10px; }\n  #paulina-chat .pg-reset svg { width: 14px; height: 14px; }\n  #paulina-chat .pg-tagline { font-size: 22px; padding: 12px 16px; margin-bottom: 8px; }\n  #paulina-chat .pg-bubble { font-size: 14px; padding: 14px 18px; }\n  #paulina-chat .pg-followup-buttons { max-width: 95%; }\n  #paulina-chat .pg-followup-btn { padding: 12px 16px; font-size: 13px; }\n  #paulina-chat .pg-circle { width: 46px; height: 46px; }\n  #paulina-chat .pg-input { height: 44px; font-size: 16px; }\n  #paulina-chat .pg-hints { gap: 8px; }\n  #paulina-chat .pg-hint { padding: 10px 14px; font-size: 13px; }\n  #paulina-chat .pg-hint-icon { width: 18px; height: 18px; }\n  #paulina-chat .pg-or-divider { font-size: 13px; margin-top: 20px; margin-bottom: 10px; }\n}\n\n\/* ===== MOBILE ===== *\/\n@media (max-width: 480px) {\n  #paulina-chat .pg-frame { padding: 16px; padding-bottom: 80px; border-radius: 14px; }\n  #paulina-chat .pg-reset { font-size: 13px; padding: 6px 10px; margin-bottom: 8px; }\n  #paulina-chat .pg-reset svg { width: 12px; height: 12px; }\n  #paulina-chat .pg-tagline { font-size: 16px; padding: 12px 10px; margin-bottom: 8px; max-width: 95%; }\n  #paulina-chat .pg-bubble { max-width: 92%; padding: 12px 16px; font-size: 14px; }\n  #paulina-chat .pg-followup-buttons { max-width: 100%; }\n  #paulina-chat .pg-followup-btn { padding: 12px 14px; font-size: 13px; }\n  #paulina-chat .pg-composer { gap: 8px; padding: 8px; }\n  #paulina-chat .pg-circle { width: 40px; height: 40px; }\n  #paulina-chat .pg-circle svg { width: 20px; height: 20px; }\n  #paulina-chat .pg-input { height: 40px; padding: 8px 12px; font-size: 16px; }\n  #paulina-chat .pg-whisper { font-size: 12px; margin-top: 10px; }\n  #paulina-chat .pg-hints { flex-direction: column; align-items: center; gap: 10px; margin-top: 8px; }\n  #paulina-chat .pg-hint { width: 85%; justify-content: center; padding: 12px 16px; font-size: 13px; }\n  #paulina-chat .pg-hint-icon { width: 18px; height: 18px; }\n  #paulina-chat .pg-or-divider { font-size: 12px; margin-top: 20px; margin-bottom: 10px; }\n}\n<\/style>\n\n<script>\n(() => {\n  const log      = document.getElementById('pg-log');\n  const form     = document.getElementById('pg-form');\n  const input    = document.getElementById('pg-input');\n  const send     = document.getElementById('pg-send');\n  const clip     = document.getElementById('pg-clip');\n  const file     = document.getElementById('pg-file');\n  const reset    = document.getElementById('pg-reset');\n  const statusEl = document.getElementById('pg-status');\n  const taglineEl = document.getElementById('pg-tagline');\n  const API_ROOT   = (window.wpApiSettings?.root || (location.origin + '\/wp-json\/')).replace(\/\\\/$\/, '');\n  const CHAT_URL   = API_ROOT + '\/paulina\/v1\/chat';\n  const UPLOAD_URL = API_ROOT + '\/paulina\/v1\/upload';\n  const TRIAL_MODE = true;\n  const TRIAL_MINUTES = 30;\n  const REGISTER_URL = '\/register';\n  const TAGLINES = {\n    de: [\"Fallstudie mit L\u00f6sungen? \u2013 W\u00e4hle 'Stundeninhalte' und 'Anwenden'.\", \"Sommerstart & Stationenlernen? W\u00e4hle 'Stundeninhalte' und '\u00dcben'!\", \"Exit Ticket & Reflexion? W\u00e4hle 'Stundeninhalte'.\"],\n    en: [\"Case Study with Solutions? Click 'Lesson Materials' and 'Transfer'!\", \"Station learning for your class \u2013 choose 'Lesson materials' and 'Practice'.\", \"Create a case study with solutions. Click on 'Lesson materials' and choose 'Transfer'.\", \"Exit Ticket? Click 'Practice'.\"],\n    fr: [\"Exercices en trois clics.\", \"Ton plan en 3 minutes.\", \"\u00c9tudes de cas pour ta classe!\", \"Exercices avec solutions. Pr\u00eats.\", \"Comp\u00e9tences? Clique Mat\u00e9riel.\"],\n    es: [\"Ejercicios en tres clics.\", \"Plan anual en 3 minutos.\", \"Casos de estudio para tu clase!\", \"Ejercicios con soluciones. Ya.\", \"Competencias? Clic en Material.\"],\n    pt: [\"Exerc\u00edcios em tr\u00eas cliques.\", \"Plano anual em 3 minutos.\", \"Casos de estudo para o teu tema!\", \"Exerc\u00edcios com solu\u00e7\u00f5es. J\u00e1.\", \"Compet\u00eancias? Clica Material.\"],\n    fi: [\"Harjoitukset kolmella klikill\u00e4.\", \"Vuosisuunnitelma 3 minuutissa.\", \"Tapaustutkimukset aiheestasi!\", \"Harjoitukset ratkaisuineen. Heti.\", \"Osaaminen? Klikkaa Materiaali.\"],\n    pl: [\"\u0106wiczenia w trzech klikni\u0119ciach.\", \"Plan roczny w 3 minuty.\", \"Studia przypadk\u00f3w do tematu!\", \"\u0106wiczenia z rozwi\u0105zaniami. Teraz.\", \"Kompetencje? Kliknij Materia\u0142.\"],\n    uk: [\"\u0412\u043f\u0440\u0430\u0432\u0438 \u0432 \u0442\u0440\u0438 \u043a\u043b\u0456\u043a\u0438.\", \"\u0420\u0456\u0447\u043d\u0438\u0439 \u043f\u043b\u0430\u043d \u0437\u0430 3 \u0445\u0432\u0438\u043b\u0438\u043d\u0438.\", \"\u041a\u0435\u0439\u0441\u0438 \u0434\u043e \u0442\u0432\u043e\u0454\u0457 \u0442\u0435\u043c\u0438!\", \"\u0412\u043f\u0440\u0430\u0432\u0438 \u0437 \u0440\u0456\u0448\u0435\u043d\u043d\u044f\u043c\u0438. \u0417\u0430\u0440\u0430\u0437.\", \"\u041a\u043e\u043c\u043f\u0435\u0442\u0435\u043d\u0446\u0456\u0457? \u041d\u0430\u0442\u0438\u0441\u043d\u0438 \u041c\u0430\u0442\u0435\u0440\u0456\u0430\u043b.\"],\n    hu: [\"Feladatok h\u00e1rom kattint\u00e1ssal.\", \"\u00c9ves terv 3 perc alatt.\", \"Esettanulm\u00e1nyok a t\u00e9m\u00e1dhoz!\", \"Feladatok megold\u00e1sokkal. Most.\", \"Kompetenci\u00e1k? Kattints Anyag.\"],\n    it: [\"Esercizi in tre clic.\", \"Piano annuale in 3 minuti.\", \"Casi studio per il tuo tema!\", \"Esercizi con soluzioni. Subito.\", \"Competenze? Clicca Materiale.\"],\n    ru: [\"\u0423\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u044f \u0432 \u0442\u0440\u0438 \u043a\u043b\u0438\u043a\u0430.\", \"\u0413\u043e\u0434\u043e\u0432\u043e\u0439 \u043f\u043b\u0430\u043d \u0437\u0430 3 \u043c\u0438\u043d\u0443\u0442\u044b.\", \"\u041a\u0435\u0439\u0441\u044b \u043f\u043e \u0442\u0432\u043e\u0435\u0439 \u0442\u0435\u043c\u0435!\", \"\u0423\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u044f \u0441 \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u043c\u0438. \u0421\u0435\u0439\u0447\u0430\u0441.\", \"\u041a\u043e\u043c\u043f\u0435\u0442\u0435\u043d\u0446\u0438\u0438? \u041d\u0430\u0436\u043c\u0438 \u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b.\"],\n    zh: [\"\u4e09\u6b21\u70b9\u51fb\u83b7\u53d6\u7ec3\u4e60\u3002\", \"3\u5206\u949f\u5b8c\u6210\u5e74\u5ea6\u8ba1\u5212\u3002\", \"\u4f60\u4e3b\u9898\u7684\u6848\u4f8b\u7814\u7a76\uff01\", \"\u5e26\u7b54\u6848\u7684\u7ec3\u4e60\u3002\u5373\u523b\u3002\", \"\u7ec3\u4e60\u80fd\u529b\uff1f\u70b9\u51fb\u6750\u6599\u3002\"],\n    tr: [\"\u00dc\u00e7 t\u0131kla al\u0131\u015ft\u0131rmalar.\", \"3 dakikada y\u0131ll\u0131k plan.\", \"Konuna \u00f6zel vaka \u00e7al\u0131\u015fmalar\u0131!\", \"\u00c7\u00f6z\u00fcml\u00fc al\u0131\u015ft\u0131rmalar. Hemen.\", \"Yetkinlikler? Materyal'e t\u0131kla.\"],\n    ar: [\"\u062a\u0645\u0627\u0631\u064a\u0646 \u0628\u062b\u0644\u0627\u062b \u0646\u0642\u0631\u0627\u062a.\", \"\u062e\u0637\u0629 \u0633\u0646\u0648\u064a\u0629 \u0641\u064a 3 \u062f\u0642\u0627\u0626\u0642.\", \"\u062f\u0631\u0627\u0633\u0627\u062a \u062d\u0627\u0644\u0629 \u0644\u0645\u0648\u0636\u0648\u0639\u0643!\", \"\u062a\u0645\u0627\u0631\u064a\u0646 \u0645\u0639 \u062d\u0644\u0648\u0644. \u0627\u0644\u0622\u0646.\", \"\u0643\u0641\u0627\u0621\u0627\u062a\u061f \u0627\u0646\u0642\u0631 \u0627\u0644\u0645\u0648\u0627\u062f.\"]\n  };\n  function getLanguage() {\n    if (window.pgInitialLang) return window.pgInitialLang;\n    const urlLang = location.pathname.match(\/^\\\/(en|de|fr|es|it|pt|pl|uk|hu|tr|ru|fi|nl|sv|no|da|cs|sk|ro|hr|sl|bg|sr|mk|el|ar|he|hi|zh|ja|ko|vi|id|ms|th|lo|km|my|bn|ta|te|mr|gu|kn|ml|pa|ur|ne|si|fa|ps|sw|am|ha|yo|ig|zu|xh|sn|rw|lg|cy|ga|gd|mt|eu|ca|gl|lv|lt|et|kk|ky|mn|tl|sm|to|fj|mi)\\\/\/)?.[1] || document.documentElement.lang?.slice(0,2).toLowerCase() || null;\n    if (urlLang && (TAGLINES[urlLang] || urlLang === 'en')) return urlLang;\n    const lang = (navigator.language || navigator.userLanguage || 'de').slice(0, 2).toLowerCase();\n    return TAGLINES[lang] ? lang : 'de';\n  }\n  function showTagline() {\n    const lang = getLanguage();\n    const lines = TAGLINES[lang];\n    const randomLine = lines[Math.floor(Math.random() * lines.length)];\n    if (taglineEl) { taglineEl.textContent = randomLine; taglineEl.classList.remove('pg-hidden'); taglineEl.style.opacity = '1'; }\n  }\n  function hideTagline() {\n    if (taglineEl && !taglineEl.classList.contains('pg-hidden')) {\n      taglineEl.style.opacity = '0';\n      setTimeout(() => taglineEl.classList.add('pg-hidden'), 300);\n    }\n  }\n  showTagline();\n\n  function translateHints() {\n    const lang = getLanguage();\n    const hints = {\n      de: ['Jahres- und Themenplan', 'Stundeninhalte', 'Stunde retten'],\n      en: ['Annual Plan & Topics', 'Lesson Materials', 'Quick Help'],\n      fr: ['Plan annuel & Sujets', 'Mat\u00e9riel de cours', 'Aide rapide'],\n      es: ['Plan anual & Clases', 'Material did\u00e1ctico', 'Ayuda r\u00e1pida'],\n      it: ['Piano annuale & Lezioni', 'Materiale didattico', 'Aiuto rapido'],\n      pt: ['Plano anual & Aulas', 'Material did\u00e1tico', 'Ajuda r\u00e1pida'],\n      pl: ['Plan roczny & Lekcje', 'Materia\u0142y dydaktyczne', 'Szybka pomoc'],\n      uk: ['\u0420\u0456\u0447\u043d\u0438\u0439 \u043f\u043b\u0430\u043d & \u0423\u0440\u043e\u043a\u0438', '\u041d\u0430\u0432\u0447\u0430\u043b\u044c\u043d\u0456 \u043c\u0430\u0442\u0435\u0440\u0456\u0430\u043b\u0438', '\u0428\u0432\u0438\u0434\u043a\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u0430'],\n      hu: ['\u00c9ves terv & \u00d3r\u00e1k', 'Tananyag', 'Gyors seg\u00edts\u00e9g'],\n      tr: ['Y\u0131ll\u0131k Plan & Dersler', 'Ders Materyali', 'H\u0131zl\u0131 Yard\u0131m'],\n      ru: ['\u0413\u043e\u0434\u043e\u0432\u043e\u0439 \u043f\u043b\u0430\u043d & \u0423\u0440\u043e\u043a\u0438', '\u0423\u0447\u0435\u0431\u043d\u044b\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b', '\u0411\u044b\u0441\u0442\u0440\u0430\u044f \u043f\u043e\u043c\u043e\u0449\u044c'],\n    };\n    const labels = hints[lang] || hints['en'];\n    document.querySelectorAll('.pg-hint span').forEach((span, i) => {\n      if (labels[i]) span.textContent = labels[i];\n    });\n  }\n\n  function translateDivider() {\n    const lang = getLanguage();\n    const orLabels = {\n      de: 'Klicke einen Button oder schreib direkt \u2013 in deiner Sprache:',\n      en: 'Click a button or write directly \u2013 in your own language:',\n      fr: 'Clic sur un bouton ou \u00e9cris directement \u2013 dans ta langue :',\n      es: 'o escribe directamente \u2013 en tu idioma:',\n      it: 'o scrivi direttamente \u2013 nella tua lingua:',\n      pt: 'ou escreve diretamente \u2013 na tua l\u00edngua:',\n      pl: 'lub napisz bezpo\u015brednio \u2013 w swoim j\u0119zyku:',\n      uk: '\u0430\u0431\u043e \u043d\u0430\u043f\u0438\u0448\u0438 \u043d\u0430\u043f\u0440\u044f\u043c\u0443 \u2013 \u0441\u0432\u043e\u0454\u044e \u043c\u043e\u0432\u043e\u044e:',\n      hu: 'vagy \u00edrj k\u00f6zvetlen\u00fcl \u2013 a saj\u00e1t nyelveden:',\n      tr: 'veya do\u011frudan yaz \u2013 kendi dilinde:',\n      ru: '\u0438\u043b\u0438 \u043d\u0430\u043f\u0438\u0448\u0438 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u2013 \u043d\u0430 \u0441\u0432\u043e\u0451\u043c \u044f\u0437\u044b\u043a\u0435:',\n      zh: '\u6216\u76f4\u63a5\u7528\u4f60\u7684\u8bed\u8a00\u5199\uff1a',\n      ar: '\u0623\u0648 \u0627\u0643\u062a\u0628 \u0645\u0628\u0627\u0634\u0631\u0629 \u2013 \u0628\u0644\u063a\u062a\u0643:',\n    };\n    const orEl = document.querySelector('.pg-or-divider');\n    if (orEl) orEl.textContent = orLabels[lang] || orLabels['en'];\n  }\n  translateDivider();\n  translateHints();\n\n  function setPlaceholder() {\n    const lang = getLanguage();\n    const p = { \n      de: \"Schreib hier...\", en: \"Write here...\", fr: \"\u00c9cris ici...\",\n      es: \"Escr\u00edbe aqu\u00ed...\", pt: \"Escreve-me...\", fi: \"Kirjoita...\",\n      pl: \"Napisz...\", uk: \"\u041d\u0430\u043f\u0438\u0448\u0438...\", hu: \"\u00cdrj...\",\n      it: \"Scrivimi...\", ru: \"\u041d\u0430\u043f\u0438\u0448\u0438...\", zh: \"\u5199\u7ed9\u6211...\",\n      tr: \"Yaz bana...\", ar: \"\u0627\u0643\u062a\u0628 \u0644\u064a...\"  \n    };\n    if (input) input.placeholder = p[lang] || p['de'];\n  }\n  setPlaceholder();\n\n  const NONCE = (window.paulinaApi?.nonce) || (window.wpApiSettings?.nonce) || null;\n  function restHeaders(extra = {}) { const h = { ...extra }; if (NONCE) h['X-WP-Nonce'] = NONCE; return h; }\n\n\/\/ === Download-Tracking + Email-Gate nach erstem Download ===\nlet pgFirstDownloadDone = false;\nconst PG_EMAIL_GATE_POPUP_ID = 29756;\n\n\/\/ Nach Reload\/Sprachwechsel: wenn Download gemacht, aber keine Email \u2192 Chat gesperrt halten\nwindow.addEventListener('load', function() {\n  if (localStorage.getItem('pg_download_done') && !localStorage.getItem('pg_email_given') && !document.body.classList.contains('logged-in')) {\n    const _i = document.getElementById('pg-input');\n    const _s = document.getElementById('pg-send');\n    const _c = document.getElementById('pg-clip');\n    if (_i) _i.disabled = true;\n    if (_s) _s.disabled = true;\n    if (_c) _c.disabled = true;\n    setTimeout(function() {\n      if (typeof elementorProFrontend !== 'undefined' && elementorProFrontend.modules && elementorProFrontend.modules.popup) {\n        try { elementorProFrontend.modules.popup.showPopup({ id: PG_EMAIL_GATE_POPUP_ID }); } catch(e){}\n      }\n    }, 1200);\n  }\n});\n\n\/\/ Wenn Nutzer nach E-Mail-Best\u00e4tigung zur\u00fcckkommt: Popup dauerhaft deaktivieren\nif (new URLSearchParams(window.location.search).get('email_confirmed') === '1') {\n  localStorage.setItem('pg_email_given', '1');\n\n  setTimeout(function() {\n    if (\n      typeof elementorProFrontend !== 'undefined' &&\n      elementorProFrontend.modules &&\n      elementorProFrontend.modules.popup\n    ) {\n      elementorProFrontend.modules.popup.closePopup({});\n    }\n  }, 500);\n}\n\ndocument.addEventListener('click', function(ev) {\n  const link = ev.target.closest('.pg-download a');\n  if (!link) return;\n\n  try {\n    fetch(API_ROOT + '\/paulina\/v1\/track-download', {\n      method: 'POST',\n      credentials: 'include',\n      headers: restHeaders({ 'Content-Type': 'application\/json' }),\n      body: JSON.stringify({ url: link.href, template: '' }),\n      keepalive: true\n    }).catch(function(){});\n  } catch (e) {}\n\n\/\/ Download-Z\u00e4hler im Browser (\u00fcberlebt IP-Wechsel)\n  if (!document.body.classList.contains('logged-in')) {\n    var _dlc = parseInt(localStorage.getItem('pg_dl_count') || '0', 10) + 1;\n    localStorage.setItem('pg_dl_count', String(_dlc));\n  }\n\n  if (\n    !pgFirstDownloadDone &&\n    !localStorage.getItem('pg_email_given') &&\n    !document.body.classList.contains('logged-in')\n  ) {\n    pgFirstDownloadDone = true;\n    \n    localStorage.setItem('pg_download_done', '1');\n    if (input) input.disabled = true;\n    if (send)  send.disabled = true;\n    if (clip)  clip.disabled = true;\n\n    setTimeout(function() {\n        \n      if (\n        typeof elementorProFrontend !== 'undefined' &&\n        elementorProFrontend.modules &&\n        elementorProFrontend.modules.popup\n      ) {\n        elementorProFrontend.modules.popup.showPopup({\n          id: PG_EMAIL_GATE_POPUP_ID\n        });\n      }\n    }, 1500);\n  }\n});\n\n\/\/ === Nach erfolgreichem Fluent-Form-Submit Popup schlie\u00dfen und merken ===\ndocument.addEventListener('fluentform_submission_success', function() {\n  localStorage.setItem('pg_email_given', '1');\n  \n  localStorage.removeItem('pg_download_done');\n  if (input) input.disabled = false;\n  if (send)  send.disabled = false;\n  if (clip)  clip.disabled = false;\n\n  if (\n    typeof elementorProFrontend !== 'undefined' &&\n    elementorProFrontend.modules &&\n    elementorProFrontend.modules.popup\n  ) {\n    elementorProFrontend.modules.popup.closePopup({});\n  }\n});\n\n  function row(html, who = 'bot') {\n      document.querySelector('.pg-frame')?.classList.add('pg-chatting');\n    const stripped = (html || '').replace(\/<br\\s*\\\/?>\/gi, '').replace(\/&nbsp;\/gi, '').trim();\n    if (!stripped) return null;\n    const r = document.createElement('div');\n    r.className = 'pg-row ' + (who === 'user' ? 'pg-right' : 'pg-left');\n    const b = document.createElement('div');\n    b.className = 'pg-bubble ' + (who === 'user' ? 'pg-user' : 'pg-bot');\n    b.innerHTML = html;\n    r.appendChild(b);\n    log.appendChild(r);\n    b.style.opacity = '0';\n    setTimeout(() => { b.style.opacity = '1'; b.style.transition = 'opacity 0.1s'; scrollToBottom(); }, 50);\n    return r;\n  }\n  function scrollToBottom() {\n    if (window.innerWidth <= 768) {\n      setTimeout(() => {\n        const last = log.lastElementChild;\n        if (last) last.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n      }, 50);\n    } else {\n      log.scrollTop = log.scrollHeight;\n    }\n  }\n  function textBubble(text, who = 'bot') {\n    const t = (typeof text === 'string') ? text : String(text || '');\n    if (!t.trim()) return null;\n    return row(linkify(t), who);\n  }\n  function typing() {\n    const r = document.createElement('div');\n    r.className = 'pg-row pg-left';\n    const b = document.createElement('div');\n    b.className = 'pg-bubble pg-bot pg-typing';\n    const _tMsgs = {\n      de: ['Einen Moment bitte, Paulina checkt aktuelle Inhalte \u2026','Kurze Pause. Paulina holt dir geeignete Unterlagen \u2026','Paulina schreibt jetzt nur f\u00fcr dich \ud83c\udf3b \u2026', 'Warte kurz. Paulina holt dir aktuelle Inhalte \u2026','Kleinen Moment. Gleich geht es los \u2026'],\n      en: ['One moment please, Paulina fetches necessary data \u2026','Being written just for you \u2026','Paulina is gathering the facts and data \u2026','Just a moment, we are scribbling \u2026'],\n      fr: ['En cours de pr\u00e9paration \u2026','En train d\\'\u00eatre r\u00e9dig\u00e9 pour vous \u2026','Paulina rassemble les faits et donn\u00e9es \u2026','Juste un instant \u2026'],\n      es: ['Tus materiales se est\u00e1n preparando \u2026','Siendo escrito justo para ti \u2026','Paulina est\u00e1 recopilando los datos \u2026','Un momento por favor \u2026'],\n      pt: ['Os teus materiais est\u00e3o a ser preparados \u2026','A ser escrito para ti \u2026','Paulina est\u00e1 a recolher os dados \u2026','O teu download ficar\u00e1 pronto em breve \u2026'],\n      it: ['I tuoi materiali sono in preparazione \u2026','Viene scritto apposta per te \u2026','Paulina raccoglie i fatti e i dati \u2026','Un momento per favore \u2026'],\n      pl: ['Twoje materia\u0142y s\u0105 przygotowywane \u2026','W\u0142a\u015bnie pisane dla ciebie \u2026','Paulina zbiera fakty i dane \u2026','Za chwil\u0119 b\u0119dzie gotowy download \u2026'],\n      uk: ['\u0422\u0432\u043e\u0457 \u043c\u0430\u0442\u0435\u0440\u0456\u0430\u043b\u0438 \u0433\u043e\u0442\u0443\u044e\u0442\u044c\u0441\u044f \u2026','\u041f\u0438\u0448\u0435\u0442\u044c\u0441\u044f \u0441\u0430\u043c\u0435 \u0434\u043b\u044f \u0442\u0435\u0431\u0435 \u2026','Paulina \u0437\u0431\u0438\u0440\u0430\u0454 \u0444\u0430\u043a\u0442\u0438 \u0442\u0430 \u0434\u0430\u043d\u0456 \u2026','\u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f \u0431\u0443\u0434\u0435 \u0433\u043e\u0442\u043e\u0432\u0435 \u0437\u0430 \u043c\u0438\u0442\u044c \u2026'],\n      hu: ['Az anyagaid k\u00e9sz\u00fclnek \u2026','\u00c9ppen neked \u00edrjuk \u2026','Paulina \u00f6sszegy\u0171jti a t\u00e9nyeket \u00e9s adatokat \u2026','A let\u00f6lt\u00e9s r\u00f6videsen elk\u00e9sz\u00fcl \u2026'],\n      fi: ['Materiaalisi valmistellaan \u2026','Kirjoitetaan juuri sinulle \u2026','Paulina ker\u00e4\u00e4 tiedot ja faktat \u2026','Latauksesi on pian valmis \u2026'],\n      ru: ['\u0422\u0432\u043e\u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u0433\u043e\u0442\u043e\u0432\u044f\u0442\u0441\u044f \u2026','\u041f\u0438\u0448\u0435\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0442\u0435\u0431\u044f \u2026','Paulina \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0444\u0430\u043a\u0442\u044b \u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u2026','\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0433\u043e\u0442\u043e\u0432\u0430 \u0441 \u043c\u0438\u043d\u0443\u0442\u044b \u043d\u0430 \u043c\u0438\u043d\u0443\u0442\u0443 \u2026'],\n      zh: ['\u60a8\u7684\u6750\u6599\u6b63\u5728\u51c6\u5907\u4e2d \u2026','\u6b63\u5728\u4e3a\u60a8\u4e13\u95e8\u7f16\u5199 \u2026','Paulina \u6b63\u5728\u6536\u96c6\u76f8\u5173\u6570\u636e \u2026','\u60a8\u7684\u4e0b\u8f7d\u5373\u5c06\u5b8c\u6210 \u2026'],\n      tr: ['Materyalleriniz haz\u0131rlan\u0131yor \u2026','Tam size \u00f6zel yaz\u0131l\u0131yor \u2026','Paulina gerekli verileri topluyor \u2026','\u0130ndirmeniz birazdan haz\u0131r olacak \u2026'],\n      ar: ['\u062c\u0627\u0631\u064d \u062a\u062d\u0636\u064a\u0631 \u0645\u0648\u0627\u062f\u0643 \u2026','\u064a\u064f\u0643\u062a\u0628 \u062e\u0635\u064a\u0635\u0627\u064b \u0644\u0643 \u2026','\u0628\u0648\u0644\u064a\u0646\u0627 \u062a\u062c\u0645\u0639 \u0627\u0644\u062d\u0642\u0627\u0626\u0642 \u0648\u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u2026','\u0633\u064a\u0643\u0648\u0646 \u062a\u0646\u0632\u064a\u0644\u0643 \u062c\u0627\u0647\u0632\u0627\u064b \u062e\u0644\u0627\u0644 \u0644\u062d\u0638\u0627\u062a \u2026']\n    };\n    const lang = getLanguage();\n    const msgs = _tMsgs[lang] || _tMsgs['en'];\n    const msg = msgs[Math.floor(Math.random() * msgs.length)];\n    b.innerHTML = '<span>' + msg + ' <\/span><span class=\"pg-dots\" aria-hidden=\"true\"><i><\/i><i><\/i><i><\/i><\/span>';\n    r.appendChild(b);\n    log.appendChild(r);\n    scrollToBottom();\n    return r;\n  }\n  function lock(on) { send.disabled = clip.disabled = input.disabled = on; statusEl.textContent = on ? 'working ...' : ''; if (reset) reset.style.opacity = on ? '0' : '1'; }\n  function linkify(text) {\n    const e = (String(text)||'').replace(\/&\/g,'&amp;').replace(\/<\/g,'&lt;').replace(\/>\/g,'&gt;');\n    return e.replace(\/https?:\\\/\\\/[^\\s)]+\/g, u => '<a href=\"' + u + '\" target=\"_blank\" rel=\"noopener\">' + u + '<\/a>').replace(\/\\n\/g,'<br>');\n  }\n  function parseFollowupOptions(text) {\n    const regex = \/^([1234ABCD])\\s*[:.\\)]\\s*(.+)$\/gm;\n    const options = []; let match;\n    while ((match = regex.exec(text)) !== null) options.push({ number: match[1], label: match[2].trim() });\n    return options;\n  }\n  function cleanTextFromOptions(text) {\n    let c = text.replace(\/^[1234ABCD][:.\\)]\\s*.+$\/gm, '');\n    c = c.replace(\/^\\(.*(?:Chat|chat|Dateien|files|gel\u00f6scht|deleted).*\\)$\/gm, '');\n    c = c.replace(\/^(?:Was m\u00f6chtest du als N\u00e4chstes\\??|What would you like next\\??|Was m\u00f6chtest du planen\\??)$\/gm, '');\n    return c.replace(\/\\n{3,}\/g, '\\n\\n').trim();\n  }\n\n  function hideMainUI() {\n    document.querySelector('.pg-hints')?.style.setProperty('display', 'none');\n    document.querySelector('.pg-or-divider')?.style.setProperty('display', 'none');\n    document.getElementById('pg-form')?.style.setProperty('display', 'none');\n  }\n  function showMainUI() {\n    document.querySelector('.pg-hints')?.style.setProperty('display', 'flex');\n    document.querySelector('.pg-or-divider')?.style.setProperty('display', 'block');\n    document.getElementById('pg-form')?.style.setProperty('display', 'flex');\n  }\n\n  function renderFollowupButtons(options) {\n    if (!options || options.length === 0) return null;\n    const container = document.createElement('div');\n    container.className = 'pg-row pg-left';\n    const wrap = document.createElement('div');\n    wrap.className = 'pg-followup-buttons';\n    options.forEach((opt, i) => {\n      const btn = document.createElement('button');\n      btn.type = 'button';\n      btn.className = 'pg-followup-btn' + (i === 0 ? ' pg-primary' : '');\n      btn.textContent = opt.label;\n      btn.dataset.pgOption = opt.number;\n      \n      btn.addEventListener('click', () => {\n        \/\/ \"Etwas anderes\" \/ \"Something else\" \/ letzte Option \u2192 Reset-Verhalten\n        const label = opt.label.toLowerCase();\n        const isResetOption = label.includes('etwas anderes') || label.includes('something else') || label.includes('autre chose') || label.includes('algo m\u00e1s') || label.includes('altro') || label.includes('outra coisa');\n        if (isResetOption) {\n          container.remove();\n          reset?.click();\n          return;\n        }\n        textBubble(opt.label, 'user');\n        ask(opt.number);\n        container.remove();\n        document.getElementById('pg-form')?.style.setProperty('display', 'flex');\n      });\n      \n      wrap.appendChild(btn);\n    });\n    container.appendChild(wrap);\n    log.appendChild(container);\n    scrollToBottom();\n    hideMainUI();\n    return container;\n  }\n  \n  const PLAN_OPTIONS_URL = () => API_ROOT + '\/paulina\/v1\/plan-options';\n  function detectPlanQuestion(text) {\n    if (!text) return false;\n    return (\n      text.includes('What is your subject, your specific school type, and grade') ||\n      (text.includes('Fach') && text.includes('Schultyp') && text.includes('Klasse') && text.includes('Komma')) ||\n      (text.includes('subject') && text.includes('school type') && text.includes('grade') && text.includes('comma'))\n    );\n  }\n  async function fetchPlanOptions(step, country, region, schooltype, subject) {\n    const params = new URLSearchParams({ step, country: country || '', region: region || '' });\n    if (schooltype) params.set('schooltype', schooltype);\n    if (subject)    params.set('subject', subject);\n    try {\n      const res = await fetch(PLAN_OPTIONS_URL() + '?' + params.toString(), { credentials: 'include', headers: restHeaders() });\n      const data = await res.json();\n      return (data?.options || []);\n    } catch (e) { console.error('plan-options fetch failed', e); return []; }\n  }\n\n  async function renderPlanDropdowns() {\n    let country = '', region = '';\n    try {\n      const geoRes = await fetch('https:\/\/ipapi.co\/json\/', { signal: AbortSignal.timeout(3000) });\n      const geoData = await geoRes.json();\n      country = (geoData.country_code || 'AT').toUpperCase();\n      region  = geoData.region || '';\n    } catch (_) { country = 'AT'; region = ''; }\n\n    const container = document.createElement('div');\n    container.className = 'pg-row pg-left';\n    container.id = 'pg-plan-dropdowns';\n    const wrap = document.createElement('div');\n    wrap.className = 'pg-plan-dropdown-wrap';\n    wrap.style.cssText = 'display:flex;flex-direction:column;gap:12px;margin-top:12px;max-width:85%;';\n    const lang = getLanguage();\n    const labels = {\n      schooltype: lang === 'de' ? 'Schultyp' : 'School type',\n      subject:    lang === 'de' ? 'Fach'     : 'Subject',\n      year:       lang === 'de' ? 'Klasse'   : 'Grade \/ Year',\n      loading:    lang === 'de' ? 'L\u00e4dt \u2026'   : 'Loading \u2026',\n      select:     lang === 'de' ? 'Bitte w\u00e4hlen \u2026' : 'Please select \u2026',\n      confirm:    lang === 'de' ? 'Best\u00e4tigen \u2713'   : 'Confirm \u2713',\n    };\n    function makeSelect(labelText, id) {\n      const group = document.createElement('div');\n      group.style.cssText = 'display:flex;flex-direction:column;gap:4px;';\n      const lbl = document.createElement('label');\n      lbl.textContent = labelText;\n      lbl.style.cssText = 'font-size:13px;font-weight:600;color:var(--ink);';\n      const sel = document.createElement('select');\n      sel.id = id; sel.disabled = true;\n      sel.style.cssText = 'appearance:none;-webkit-appearance:none;border:1.5px solid var(--border);border-radius:12px;padding:12px 40px 12px 16px;font-size:15px;color:var(--ink);background:white url(\"data:image\/svg+xml,%3Csvg xmlns=\\'http:\/\/www.w3.org\/2000\/svg\\' width=\\'16\\' height=\\'16\\' viewBox=\\'0 0 24 24\\'%3E%3Cpath d=\\'M6 9l6 6 6-6\\' fill=\\'none\\' stroke=\\'%239ca3af\\' stroke-width=\\'2\\' stroke-linecap=\\'round\\'\/%3E%3C\/svg%3E\") no-repeat right 14px center;background-size:16px 16px;cursor:pointer;transition:border-color .15s;width:100%;';\n      sel.addEventListener('focus',  () => { sel.style.borderColor = 'var(--accent)'; });\n      sel.addEventListener('blur',   () => { sel.style.borderColor = 'var(--border)'; });\n      const placeholder = document.createElement('option');\n      placeholder.value = ''; placeholder.textContent = labels.loading; placeholder.disabled = true; placeholder.selected = true;\n      sel.appendChild(placeholder);\n      group.appendChild(lbl); group.appendChild(sel);\n      return { group, sel };\n    }\n    const { group: g1, sel: selSchooltype } = makeSelect(labels.schooltype, 'pg-sel-schooltype');\n    const { group: g2, sel: selSubject    } = makeSelect(labels.subject,    'pg-sel-subject');\n    const { group: g3, sel: selYear       } = makeSelect(labels.year,       'pg-sel-year');\n    function populateSelect(sel, options, placeholderText) {\n      sel.innerHTML = '';\n      const ph = document.createElement('option');\n      ph.value = ''; ph.textContent = placeholderText; ph.disabled = true; ph.selected = true;\n      sel.appendChild(ph);\n      options.forEach(opt => { const o = document.createElement('option'); o.value = opt; o.textContent = opt; sel.appendChild(o); });\n      sel.disabled = options.length === 0;\n    }\n    const confirmBtn = document.createElement('button');\n    confirmBtn.type = 'button'; confirmBtn.className = 'pg-followup-btn pg-primary';\n    confirmBtn.textContent = labels.confirm; confirmBtn.disabled = true;\n    confirmBtn.style.marginTop = '4px';\n    function checkConfirmReady() { confirmBtn.disabled = !(selSchooltype.value && selSubject.value && selYear.value); }\n    fetchPlanOptions('schooltype', country, region, '', '').then(opts => {\n      populateSelect(selSchooltype, opts, labels.select); selSchooltype.disabled = false;\n    });\n    selSchooltype.addEventListener('change', async () => {\n      populateSelect(selSubject, [], labels.loading); populateSelect(selYear, [], labels.loading);\n      selSubject.disabled = true; selYear.disabled = true; confirmBtn.disabled = true;\n      const opts = await fetchPlanOptions('subject', country, region, selSchooltype.value, '');\n      populateSelect(selSubject, opts, labels.select); selSubject.disabled = opts.length === 0;\n    });\n    selSubject.addEventListener('change', async () => {\n      populateSelect(selYear, [], labels.loading); selYear.disabled = true; confirmBtn.disabled = true;\n      const opts = await fetchPlanOptions('year', country, region, selSchooltype.value, selSubject.value);\n      populateSelect(selYear, opts, labels.select); selYear.disabled = opts.length === 0;\n    });\n    selYear.addEventListener('change', checkConfirmReady);\n    \n    confirmBtn.addEventListener('click', () => {\n      const schooltype = selSchooltype.value; const subject = selSubject.value; const year = selYear.value;\n      if (!schooltype || !subject || !year) return;\n      \n      container.remove();\n      const _f = document.getElementById('pg-form');\n      if (_f) { _f.style.setProperty('display', 'flex'); _f.style.setProperty('order', '1'); }\n      document.querySelector('.pg-hints')?.style.setProperty('order', '3');\n      document.querySelector('.pg-or-divider')?.style.setProperty('order', '2');\n      const combined = `${subject}, ${schooltype}, ${year}`;\n      \n      textBubble(combined, 'user'); ask(combined);\n    });\n    \n    wrap.appendChild(g1); wrap.appendChild(g2); wrap.appendChild(g3); wrap.appendChild(confirmBtn);\n    const switchHint = document.createElement('button');\n    switchHint.type = 'button'; switchHint.className = 'pg-switch-hint';\n    const switchLabels = {\n      de: '\u2190 Anderen Bereich w\u00e4hlen', en: '\u2190 Choose another area',\n      fr: '\u2190 Choisir un autre domaine', es: '\u2190 Elegir otra \u00e1rea',\n      it: '\u2190 Scegliere un\\'altra area', pt: '\u2190 Escolher outra \u00e1rea',\n      pl: '\u2190 Wybierz inny obszar', uk: '\u2190 \u041e\u0431\u0440\u0430\u0442\u0438 \u0456\u043d\u0448\u0443 \u043e\u0431\u043b\u0430\u0441\u0442\u044c',\n      hu: '\u2190 M\u00e1sik ter\u00fclet', tr: '\u2190 Ba\u015fka bir alan se\u00e7',\n      ru: '\u2190 \u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c', zh: '\u2190 \u9009\u62e9\u5176\u4ed6\u533a\u57df', ar: '\u2190 \u0627\u062e\u062a\u0631 \u0645\u0646\u0637\u0642\u0629 \u0623\u062e\u0631\u0649',\n    };\n    switchHint.textContent = switchLabels[lang] || switchLabels['en'];\n    switchHint.addEventListener('click', () => { reset?.click(); });\n    wrap.appendChild(switchHint);\n    container.appendChild(wrap);\n    log.appendChild(container);\n    scrollToBottom();\n    hideMainUI();\n  }\n  \n  const MATERIAL_OPTIONS_URL = () => API_ROOT + '\/paulina\/v1\/material-options';\n  function detectMaterialQuestion(text) {\n if (!text) return false;\n return (\n text.includes('<!--PG_GOAL_QUESTION-->') ||\n text.includes('What purpose do you follow') ||\n text.includes('Welchem Zweck folgst du') ||\n text.includes('purpose do you follow') ||\n text.includes('Zweck folgst')\n );\n }\n \n  async function fetchMaterialOptions() {\n    const lang = getLanguage();\n    try {\n      const res = await fetch(MATERIAL_OPTIONS_URL() + '?lang=' + lang, { credentials: 'include', headers: restHeaders() });\n      const data = await res.json();\n      return data?.groups || {};\n    } catch (e) { console.error('material-options fetch failed', e); return {}; }\n  }\n  async function renderMaterialForm(prefillTopic = '') {\n    document.getElementById('pg-material-form')?.remove();\n    const lang = getLanguage();\n    const labels = {\n      topic: lang === 'de' ? 'Gib dein Thema ein' : 'Enter your topic',\n      topicHint: lang === 'de' ? 'z.B. Global Warming, Zahlenbereich 1-100, Er\u00f6rterung am Beispiel von Goethes \u201eWerther\"...' : 'e.g. Climate zones in..., numbers 1-100, Argumentative essay: phone ban at schools...',\n      activation: lang === 'de' ? 'Aktivieren' : 'Activate',\n      practice: lang === 'de' ? '\u00dcben' : 'Practice',\n      transfer: lang === 'de' ? 'Anwenden' : 'Transfer',\n      check: lang === 'de' ? 'Pr\u00fcfen' : 'Check',\n      select: lang === 'de' ? 'Bitte w\u00e4hlen \u2026' : 'Please select \u2026',\n      loading: lang === 'de' ? 'L\u00e4dt \u2026' : 'Loading \u2026',\n      confirm: lang === 'de' ? 'Erstellen \u2713' : 'Create \u2713',\n    };\n    const container = document.createElement('div');\n    container.className = 'pg-row pg-left'; container.id = 'pg-material-form';\n    const wrap = document.createElement('div');\n    wrap.style.cssText = 'display:flex;flex-direction:column;gap:16px;margin-top:8px;max-width:95%;width:100%;';\n    const topicGroup = document.createElement('div');\n    topicGroup.style.cssText = 'display:flex;flex-direction:column;gap:4px;';\n    const topicLabel = document.createElement('label');\n    topicLabel.textContent = labels.topic;\n    topicLabel.style.cssText = 'font-size:13px;font-weight:600;color:var(--ink);';\n    const topicInput = document.createElement('input');\n    topicInput.type = 'text'; topicInput.placeholder = labels.topicHint;\n    topicInput.style.cssText = 'border:1.5px solid var(--border);border-radius:12px;padding:12px 16px;font-size:15px;color:var(--ink);background:white;width:100%;outline:none;font-family:inherit;transition:border-color .15s;';\n    if (prefillTopic && !topicInput.value) topicInput.value = prefillTopic;\n    else if (window._pgUploadedTopic && !topicInput.value) topicInput.value = window._pgUploadedTopic;\n    topicInput.addEventListener('focus', () => { topicInput.style.borderColor = 'var(--accent)'; });\n    topicInput.addEventListener('blur',  () => { topicInput.style.borderColor = 'var(--border)'; });\n    const topicRow = document.createElement('div');\n    topicRow.style.cssText = 'display:flex;gap:8px;align-items:center;';\n    topicRow.appendChild(topicInput);\n    const uploadBtn = document.createElement('button');\n    uploadBtn.type = 'button'; uploadBtn.textContent = '+';\n    uploadBtn.title = lang === 'de' ? 'Datei hochladen' : 'Upload file';\n    uploadBtn.style.cssText = 'width:44px;height:44px;border-radius:50%;border:1.5px solid var(--border);background:white;font-size:22px;cursor:pointer;flex-shrink:0;display:flex;align-items:center;justify-content:center;transition:all .15s;color:var(--ink);';\n    uploadBtn.addEventListener('click', () => file?.click());\n    topicRow.appendChild(uploadBtn);\n    topicGroup.appendChild(topicLabel); topicGroup.appendChild(topicRow);\n    wrap.appendChild(topicGroup);\n    const dropdownRow = document.createElement('div');\n    dropdownRow.style.cssText = 'display:grid;grid-template-columns:repeat(4,1fr);gap:10px;';\n    const goalKeys = ['activation', 'practice', 'transfer', 'check'];\n    const goalLabels = [labels.activation, labels.practice, labels.transfer, labels.check];\n    const selects = {};\n    function makeGoalSelect(key, labelText) {\n      const group = document.createElement('div');\n      group.style.cssText = 'display:flex;flex-direction:column;gap:4px;';\n      const lbl = document.createElement('label');\n      lbl.textContent = labelText;\n      lbl.style.cssText = 'font-size:12px;font-weight:600;color:var(--ink);text-align:center;';\n      const sel = document.createElement('select');\n      sel.style.cssText = 'appearance:none;-webkit-appearance:none;border:1.5px solid var(--border);border-radius:12px;padding:10px 30px 10px 12px;font-size:13px;color:var(--ink);background:white url(\"data:image\/svg+xml,%3Csvg xmlns=\\'http:\/\/www.w3.org\/2000\/svg\\' width=\\'14\\' height=\\'14\\' viewBox=\\'0 0 24 24\\'%3E%3Cpath d=\\'M6 9l6 6 6-6\\' fill=\\'none\\' stroke=\\'%239ca3af\\' stroke-width=\\'2\\' stroke-linecap=\\'round\\'\/%3E%3C\/svg%3E\") no-repeat right 10px center;background-size:14px;cursor:pointer;width:100%;transition:border-color .15s;';\n      const ph = document.createElement('option');\n      ph.value = ''; ph.textContent = labels.loading; ph.disabled = true; ph.selected = true;\n      sel.appendChild(ph);\n      sel.addEventListener('focus', () => { sel.style.borderColor = 'var(--accent)'; });\n      sel.addEventListener('blur',  () => { sel.style.borderColor = 'var(--border)'; });\n      sel.addEventListener('change', () => {\n        goalKeys.forEach(k => { if (k !== key) selects[k].selectedIndex = -1; });\n        checkReady();\n      });\n      group.appendChild(lbl); group.appendChild(sel);\n      selects[key] = sel;\n      return group;\n    }\n    goalKeys.forEach((key, i) => dropdownRow.appendChild(makeGoalSelect(key, goalLabels[i])));\n    wrap.appendChild(dropdownRow);\n    fetchMaterialOptions().then(groups => {\n      goalKeys.forEach(key => {\n        const sel = selects[key]; const items = groups[key] || [];\n        sel.innerHTML = '';\n        items.forEach(item => { const o = document.createElement('option'); o.value = item.name; o.textContent = item.label; sel.appendChild(o); });\n        const phOpt = document.createElement('option');\n        phOpt.value = ''; phOpt.textContent = lang === 'de' ? '\u2013 w\u00e4hlen \u2013' : '\u2013 select \u2013';\n        phOpt.disabled = true; phOpt.selected = true;\n        sel.insertBefore(phOpt, sel.firstChild);\n        sel.disabled = false;\n      });\n      checkReady();\n    });\n    const confirmBtn = document.createElement('button');\n    confirmBtn.type = 'button'; confirmBtn.className = 'pg-followup-btn pg-primary';\n    confirmBtn.textContent = labels.confirm; confirmBtn.disabled = true;\n    confirmBtn.style.cssText = 'margin-top:4px;width:100%;';\n    function checkReady() { confirmBtn.disabled = !topicInput.value.trim(); }\n    topicInput.addEventListener('input', checkReady);\n    \n    confirmBtn.addEventListener('click', () => {\n      const topic = topicInput.value.trim();\n      if (!topic) {\n        topicInput.style.borderColor = 'red';\n        topicInput.placeholder = lang === 'de' ? 'Bitte Thema eingeben!' : 'Please enter a topic!';\n        topicInput.focus(); return;\n      }\n      topicInput.style.borderColor = 'var(--border)';\n      let selectedGoal = ''; let selectedTemplate = '';\n      goalKeys.forEach(key => {\n        const val = selects[key].value;\n        if (val && val !== '__skip__' && val !== '') { selectedGoal = key; selectedTemplate = val; }\n      });\n      \n      container.remove();\n      \/\/ Composer wieder zeigen + \u00fcber die Buttons setzen (Dialog-Reihenfolge)\n      const _f = document.getElementById('pg-form');\n      if (_f) { _f.style.setProperty('display', 'flex'); _f.style.setProperty('order', '1'); }\n      document.querySelector('.pg-hints')?.style.setProperty('order', '3');\n      document.querySelector('.pg-or-divider')?.style.setProperty('order', '2');\n      \n      let combined = topic;\n      if (selectedGoal) combined += ' | goal:' + selectedGoal;\n      if (selectedTemplate) combined += ' | template:' + selectedTemplate;\n      textBubble(topic, 'user'); ask(combined);\n    });\n    \n    wrap.appendChild(confirmBtn);\n    const switchHintMat = document.createElement('button');\n    switchHintMat.type = 'button'; switchHintMat.className = 'pg-switch-hint';\n    const switchLabelsMat = {\n      de: '\u2190 Anderen Bereich w\u00e4hlen', en: '\u2190 Choose another area',\n      fr: '\u2190 Choisir un autre domaine', es: '\u2190 Elegir otra \u00e1rea',\n      it: '\u2190 Scegliere un\\'altra area', pt: '\u2190 Escolher outra \u00e1rea',\n      pl: '\u2190 Wybierz inny obszar', uk: '\u2190 \u041e\u0431\u0440\u0430\u0442\u0438 \u0456\u043d\u0448\u0443 \u043e\u0431\u043b\u0430\u0441\u0442\u044c',\n      hu: '\u2190 M\u00e1sik ter\u00fclet', tr: '\u2190 Ba\u015fka bir alan se\u00e7',\n      ru: '\u2190 \u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c', zh: '\u2190 \u9009\u62e9\u5176\u4ed6\u533a\u57df', ar: '\u2190 \u0627\u062e\u062a\u0631 \u0645\u0646\u0637\u0642\u0629 \u0623\u062e\u0631\u0649',\n    };\n    switchHintMat.textContent = switchLabelsMat[lang] || switchLabelsMat['en'];\n    switchHintMat.addEventListener('click', () => { reset?.click(); });\n    wrap.appendChild(switchHintMat);\n    container.appendChild(wrap);\n    log.appendChild(container);\n    scrollToBottom();\n    topicInput.focus();\n    hideMainUI();\n  }\n  \n  function renderAnswer(text, downloadUrl = null) {\n    if (detectPlanQuestion(text)) { renderPlanDropdowns(); return; }\n    if (detectMaterialQuestion(text)) {\n      const topicMatch = (text || '').match(\/<!--PG_TOPIC:(.+?)-->\/);\n      const prefillTopic = topicMatch ? topicMatch[1].trim() : '';\n      renderMaterialForm(prefillTopic); return;\n    }\n    if (typeof text === 'string') text = text.replace(\/<!--PG_TOPIC:.+?-->\/g, '').replace(\/<!--PG_GOAL_QUESTION-->\/g, '').trim();\n    const options = parseFollowupOptions(text || '');\n    const hasOptions = options.length >= 2;\n    const displayText = hasOptions ? cleanTextFromOptions(text) : text;\n    if (displayText && displayText.trim()) row(linkify(displayText), 'bot');\n    if (downloadUrl) {\n      const safe = downloadUrl.replace(\/\"\/g, '&quot;');\n      const dlRow = row('<div class=\"pg-download\"><a href=\"' + safe + '\" target=\"_blank\" rel=\"noopener noreferrer\">\ud83d\udcc4 Download your file<\/a><\/div>', 'bot');\n      if (dlRow) dlRow.querySelector('.pg-bubble')?.classList.add('pg-flat');\n    }\n    \n    if (hasOptions) renderFollowupButtons(options);\n    \n    if (!downloadUrl && typeof text === 'string') {\n      const m = text.match(\/(?:^|\\n)\\s*Download(?:\\s+your\\s+file)?\\s*:\\s*(https?:\\\/\\\/\\S+)\/i);\n      if (m) {\n        const dlRow = row('<div class=\"pg-download\"><a href=\"' + m[1].replace(\/\"\/g,'&quot;') + '\" target=\"_blank\" rel=\"noopener noreferrer\">\ud83d\udcc4 Download your file<\/a><\/div>', 'bot');\n        if (dlRow) dlRow.querySelector('.pg-bubble')?.classList.add('pg-flat');\n      }\n    }\n  }\n  \n  let started = false;\n  document.addEventListener('click', function(ev) {\n    const el = ev.target.closest('[data-pg-utter]');\n    if (!el) return;\n    ev.preventDefault(); hideTagline();\n    if (send?.disabled || input?.disabled) return;\n    const utter = (el.getAttribute('data-pg-utter') || '').trim();\n    if (!utter) return;\n    document.getElementById('paulina-chat')?.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n    if (input) input.value = '';\n    ask(utter, {\n      starter: true,\n      intent: (el.getAttribute('data-pg-intent') || '').trim(),\n      goal: (el.getAttribute('data-pg-goal') || '').trim(),\n      topic: (el.getAttribute('data-pg-topic') || '').trim(),\n      plantype: (el.getAttribute('data-pg-plantype') || '').trim()\n    });\n  });\n  clip?.addEventListener('click', () => { hideTagline(); file?.click(); });\n  file?.addEventListener('change', async () => {\n    if (!file.files || !file.files[0]) return;\n    hideTagline();\n    const f = file.files[0];\n    lock(true); statusEl.textContent = 'uploading ...';\n    const info = textBubble('\ud83d\udcce ' + f.name + ' uploading ...', 'bot');\n    try {\n      const fd = new FormData(); fd.append('file', f);\n      const res = await fetch(UPLOAD_URL, { method: 'POST', body: fd, credentials: 'include', headers: restHeaders() });\n      let data = {}; try { data = await res.json(); } catch (_) {}\n      if (!res.ok || data?.ok === false) {\n        info.querySelector('.pg-bubble').innerHTML = '\u274c ' + (data?.error || data?.data?.error || data?.message || 'Upload failed.');\n      } else {\n        info.querySelector('.pg-bubble').innerHTML = '\ud83d\udcce ' + (data.title || f.name) + ' ready!';\n        window._pgUploadedTopic = (data.title || f.name).replace(\/\\.[^.]+$\/, '').replace(\/[-_]\/g, ' ').trim();\n      }\n    } catch (e) { console.error(e); info.querySelector('.pg-bubble').innerHTML = '\u274c Upload failed'; }\n    finally { lock(false); file.value = ''; }\n  });\n  input?.addEventListener('keydown', (ev) => {\n    if (ev.key === 'Enter' && !ev.shiftKey) {\n      ev.preventDefault(); hideTagline();\n      if (form?.requestSubmit) form.requestSubmit(); else form?.dispatchEvent(new Event('submit', { cancelable: true }));\n    }\n  });\n  input?.addEventListener('focus', () => hideTagline());\n  form?.addEventListener('submit', async (ev) => {\n    ev.preventDefault(); hideTagline();\n    const q = (input.value || '').trim(); if (!q) return;\n    textBubble(q, 'user'); input.value = ''; await ask(q);\n  });\n  reset?.addEventListener('click', async () => {\n    log.innerHTML = ''; input.value = '';\n    document.getElementById('pg-material-form')?.remove();\n    document.getElementById('pg-plan-dropdowns')?.remove();\n    \n    showMainUI();\n    document.querySelector('.pg-frame')?.classList.remove('pg-chatting');\n    document.getElementById('pg-form')?.style.removeProperty('order');\n    document.querySelector('.pg-hints')?.style.removeProperty('order');\n    document.querySelector('.pg-or-divider')?.style.removeProperty('order');\n    \n    document.getElementById('paulina-chat')?.scrollIntoView({ behavior: 'smooth', block: 'start' });\n    started = false;\n    try { await fetch(API_ROOT + '\/paulina\/v1\/reset', { method: 'POST', credentials: 'include', headers: restHeaders() }); } catch (_) {}\n  });\n  document.addEventListener('pg-marketing-trigger', (ev) => {\n    hideTagline();\n    const { utter, intent, goal, topic, plantype } = ev.detail || {};\n    if (utter) ask(utter, { starter: true, intent, goal, topic, plantype });\n  });\n  \n  async function ask(prompt, meta = {}) {\n    \/\/ Browser-seitiges Download-Limit (greift auch bei IP-Wechsel)\n    if (\n      !document.body.classList.contains('logged-in') &&\n      parseInt(localStorage.getItem('pg_dl_count') || '0', 10) >= 5\n    ) {\n      const msg = \"Your trial has ended.\\n\\nDeine Testzeit ist beendet.\\n\\nBitte registriere dich, um weiterzumachen.\";\n      textBubble(msg, 'bot');\n      const regRow = document.createElement('div');\n      regRow.className = 'pg-row pg-left';\n      regRow.innerHTML = '<a href=\"' + REGISTER_URL + '\" class=\"pg-hint\" style=\"text-decoration:none;\">Register<\/a>';\n      log.appendChild(regRow);\n      if (input) input.disabled = true;\n      if (send)  send.disabled = true;\n      if (clip)  clip.disabled = true;\n      setTimeout(() => { window.location.href = REGISTER_URL; }, 10000);\n      return;\n    }\n    lock(true);\n    const wait = typing();\n    \n    try {\n      const urlLang = location.pathname.match(\/^\\\/(en|de|fr|es|it|pt|pl|uk|hu|tr|ru|fi|nl|sv|no|da|cs|sk|ro|hr|sl|bg|sr|mk|el|ar|he|hi|zh|ja|ko|vi|id|ms|th|lo|km|my|bn|ta|te|mr|gu|kn|ml|pa|ur|ne|si|fa|ps|sw|am|ha|yo|ig|zu|xh|sn|rw|lg|cy|ga|gd|mt|eu|ca|gl|lv|lt|et|kk|ky|mn|tl|sm|to|fj|mi)\\\/\/)?.[1] || document.documentElement.lang?.slice(0,2).toLowerCase() || null;\n      const req = { utter: prompt, prompt, live: true, starter: !!meta.starter, intent: meta.intent||undefined, goal: meta.goal||undefined, topic: meta.topic||undefined, plantype: meta.plantype||undefined, trial_mode: TRIAL_MODE, trial_minutes: TRIAL_MINUTES, lang_override: urlLang || undefined };\n      if (!started || meta.forceReset) { req.reset = true; started = true; }\n      const controller = new AbortController();\n      const t = setTimeout(() => controller.abort(), 180000);\n      let res;\n      try { res = await fetch(CHAT_URL, { method: 'POST', credentials: 'include', headers: restHeaders({ 'Content-Type': 'application\/json' }), body: JSON.stringify(req), signal: controller.signal }); }\n      finally { clearTimeout(t); }\n      let json = {}; try { json = await res.json(); } catch (_) {}\n      const env = (json && typeof json === 'object') ? json : {};\n      const payload = (env.data && typeof env.data === 'object') ? env.data : env;\n      if (payload.mode === 'trial_expired') {\n        const msg = payload.trial_reason === 'download'\n          ? \"Your trial has ended.\\n\\nChoose how you would like to continue with Paulina.\"\n          : \"Deine Testzeit ist beendet.\\n\\nW\u00e4hle jetzt, wie du mit Paulina weiterarbeiten m\u00f6chtest.\";\n        textBubble(msg, 'bot');\n        const regRow = document.createElement('div');\n        regRow.className = 'pg-row pg-left';\n        regRow.innerHTML = '<a href=\"' + REGISTER_URL + '\" class=\"pg-hint\" style=\"text-decoration:none;\">Register<\/a>';\n        log.appendChild(regRow);\n        input.disabled = send.disabled = clip.disabled = true;\n        setTimeout(() => { window.location.href = REGISTER_URL; }, 10000);\n        return;\n      }\n      if (payload.mode === 'reset') {\n        log.innerHTML = ''; started = false;\n        if (wait?.remove) wait.remove(); lock(false); input.focus(); showTagline(); return;\n      }\n      if (payload.mode === 'wait') return;\n      renderAnswer(\n        (typeof payload.answer === 'string') ? payload.answer : (env.message || ''),\n        (typeof payload.download_url === 'string' && payload.download_url.length > 0) ? payload.download_url : null\n      );\n    } catch (e) {\n      console.error('Chat API call failed:', e);\n      textBubble('Something went wrong. Please try again.', 'bot');\n    } finally {\n      if (wait?.remove) wait.remove(); lock(false); input.focus();\n    }\n  }\n  window.paulinaStarterPack = function() {\n    hideTagline();\n    document.getElementById('paulina-chat')?.scrollIntoView({ behavior: 'smooth', block: 'start' });\n    setTimeout(() => { document.dispatchEvent(new CustomEvent('pg-marketing-trigger', { detail: { utter: 'I need a year plan for the new school year', intent: 'planning' } })); }, 500);\n  };\n  window.addEventListener('load', function() {\n    const params = new URLSearchParams(window.location.search);\n    const start = params.get('start');\n    if (!start) return;\n    const topic = params.get('topic') || '';\n    const goal = params.get('goal') || '';\n    const utter = params.get('utter') || '';\n    const intent = params.get('intent') || 'material';\n    setTimeout(() => {\n      if (start === 'explicit' && utter) {\n        document.dispatchEvent(new CustomEvent('pg-marketing-trigger', { \n          detail: { utter: utter, intent: intent, l2: params.get('l2') || 'no', age: params.get('age') || '' }\n        }));\n        return;\n      }\n      const map = {\n        'jahresplan': { utter: 'I need to plan a lesson', intent: 'planning', plantype: 'time' },\n        'themenplan': { utter: 'I need to plan a topic', intent: 'planning', plantype: 'topic' },\n        'stunde':     { utter: 'I need to plan a lesson', intent: 'planning', plantype: 'lesson' },\n        'material':   { utter: 'I need to create teaching material', intent: 'material' },\n        'emergency':  { utter: 'I need quick help for tomorrow', intent: 'emergency' },\n        'activate':   { utter: 'I need to create teaching material', intent: 'material', goal: 'activation' },\n        'practice':   { utter: 'I need to create teaching material', intent: 'material', goal: 'practice' },\n        'apply':      { utter: 'I need to create teaching material', intent: 'material', goal: 'transfer' },\n        'check':      { utter: 'I need to create teaching material', intent: 'material', goal: 'check' }\n      };\n      const detail = map[start];\n      if (detail) {\n        if (topic) detail.topic = topic;\n        if (goal) detail.goal = goal;\n        document.dispatchEvent(new CustomEvent('pg-marketing-trigger', { detail }));\n      }\n    }, 3000);\n  });\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fc00975 elementor-widget elementor-widget-eael-content-ticker\" data-id=\"fc00975\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"eael-content-ticker.default\">\n\t\t\t\t\t<div class=\"eael-ticker-wrap\" id=\"eael-ticker-wrap-fc00975\"><div class=\"ticker-badge\">\n                    <span>Aktuell<\/span>\n                <\/div><div class=\"eael-ticker\">\n                <div class=\"swiper swiper-8 eael-content-ticker swiper-container-fc00975\" data-pagination=\".swiper-pagination-fc00975\" data-arrow-next=\".swiper-button-next-fc00975\" data-arrow-prev=\".swiper-button-prev-fc00975\" data-effect=\"slide\" data-speed=\"3000\" data-autoplay=\"714\" data-loop=\"1\" data-arrows=\"1\">\n                    <div class=\"swiper-wrapper\"><div class=\"swiper-slide\">\n        <div class=\"ticker-content\">\n            <a href=\"https:\/\/paulinagreen.com\/en\/exkursionen-koennen-leben-veraendern\/\" class=\"ticker-content-link\">Klassenfahrt planen: Was SMD = 0,85 bedeutet \u2013 und warum das deine n\u00e4chste Exkursion ver\u00e4ndert<\/a>\n        <\/div>\n    <\/div><div class=\"swiper-slide\">\n        <div class=\"ticker-content\">\n            <a href=\"https:\/\/paulinagreen.com\/en\/deutschland-braucht-bis-2035-zwischen-49-000-und-76-000-zusaetzliche-lehrkraefte\/\" class=\"ticker-content-link\">Deutschland braucht bis 2035 zwischen 49.000 und 76.000 zus\u00e4tzliche Lehrkr\u00e4fte<\/a>\n        <\/div>\n    <\/div><div class=\"swiper-slide\">\n        <div class=\"ticker-content\">\n            <a href=\"https:\/\/paulinagreen.com\/en\/schweden-investiert-104-millionen-euro-fuer-buecher-zurueck-in-die-schulen-was-die-ki-welt-daraus-lernen-muss-und-was-teacher-first-bedeutet\/\" class=\"ticker-content-link\">Schweden investiert 104 Millionen Euro f\u00fcr B\u00fccher zur\u00fcck in die Schulen. Was die KI-Welt daraus lernen muss \u2014 und was &#8218;Teacher First&#8216; bedeutet<\/a>\n        <\/div>\n    <\/div><div class=\"swiper-slide\">\n        <div class=\"ticker-content\">\n            <a href=\"https:\/\/paulinagreen.com\/en\/der-digital-skills-gap-im-klassenzimmer-warum-herkoemmliche-ki-tools-lehrkraefte-im-stich-lassen\/\" class=\"ticker-content-link\">Der Digital Skills Gap im Klassenzimmer: Warum herk\u00f6mmliche KI-Tools Lehrkr\u00e4fte im Stich lassen<\/a>\n        <\/div>\n    <\/div><\/div>\n\t\t\t\t<\/div> <div class=\"content-ticker-pagination\"><div class=\"swiper-button-next swiper-button-next-fc00975\"><svg class=\"e-font-icon-svg e-fas-angle-right\" viewBox=\"0 0 256 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"><\/path><\/svg><\/div><div class=\"swiper-button-prev swiper-button-prev-fc00975\"><svg class=\"e-font-icon-svg e-fas-angle-left\" viewBox=\"0 0 256 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M31.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L127.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L201.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34z\"><\/path><\/svg><\/div><\/div><\/div>\n\t\t<\/div>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ce0b5df elementor-widget elementor-widget-video\" data-id=\"ce0b5df\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;youtube_url&quot;:&quot;https:\\\/\\\/youtu.be\\\/f3J1ojrbeNY&quot;,&quot;video_type&quot;:&quot;youtube&quot;,&quot;controls&quot;:&quot;yes&quot;}\" data-widget_type=\"video.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-wrapper elementor-open-inline\">\n\t\t\t<div class=\"elementor-video\"><\/div>\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7724341 e-con-full e-flex e-con e-child\" data-id=\"7724341\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-6d6d20d e-con-full e-flex e-con e-child\" data-id=\"6d6d20d\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-3b4ac39 e-con-full e-flex e-con e-child\" data-id=\"3b4ac39\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8f87a49 elementor-widget elementor-widget-text-editor\" data-id=\"8f87a49\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Keine Speicherung der Chat-Inhalte durch Paulina Gr\u00fcn<\/p><p>DSGVO-orientiert &amp; in der EU gehostet<\/p><p>Einfach und leicht zu handhaben<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-e274212 e-con-full e-flex e-con e-child\" data-id=\"e274212\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-01c5d95 elementor-widget elementor-widget-text-editor\" data-id=\"01c5d95\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Sofort p\u00e4dagogisch durchdachte Inhalte<\/p><p>Flexibel f\u00fcr Niveau, Sprache und Situation<\/p><p>Unterst\u00fctzt bei Durchf\u00fchrung und Differenzierung<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Sag Paulina dein Thema. Sie plant und erstellt f\u00fcr deinen Schulalltag. Reset Jahres- &#038; Themenplan Stundeninhalte Stunde retten oder schreib direkt \u2013 in deiner Sprache: Aktuell Klassenfahrt planen: Was SMD = 0,85 bedeutet \u2013 und warum das deine n\u00e4chste Exkursion ver\u00e4ndert Deutschland braucht bis 2035 zwischen 49.000 und 76.000 zus\u00e4tzliche Lehrkr\u00e4fte Schweden investiert 104 Millionen [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_surecart_dashboard_logo_width":"180px","_surecart_dashboard_show_logo":true,"_surecart_dashboard_navigation_orders":true,"_surecart_dashboard_navigation_invoices":true,"_surecart_dashboard_navigation_subscriptions":true,"_surecart_dashboard_navigation_downloads":true,"_surecart_dashboard_navigation_billing":true,"_surecart_dashboard_navigation_account":true,"footnotes":""},"class_list":["post-9356","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/paulinagreen.com\/en\/wp-json\/wp\/v2\/pages\/9356","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/paulinagreen.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/paulinagreen.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/paulinagreen.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/paulinagreen.com\/en\/wp-json\/wp\/v2\/comments?post=9356"}],"version-history":[{"count":2185,"href":"https:\/\/paulinagreen.com\/en\/wp-json\/wp\/v2\/pages\/9356\/revisions"}],"predecessor-version":[{"id":29814,"href":"https:\/\/paulinagreen.com\/en\/wp-json\/wp\/v2\/pages\/9356\/revisions\/29814"}],"wp:attachment":[{"href":"https:\/\/paulinagreen.com\/en\/wp-json\/wp\/v2\/media?parent=9356"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}